2017-04-06 9 views
1

以下のコードでは、サイズを18と見込んでいますが、0が表示されます。理由を特定できませんでした。Selenium Webdriver:正しいLi要素を表示していません

私はAmazonに本を探していて、最終的には書籍のタイトルを配列に保存したいと考えています。ありがとう!

@Test 
public void searchTestOne(){ 
    System.setProperty("webdriver.gecko.driver", "C:\\geckodriver\\geckodriver.exe"); 
    WebDriver driver = new FirefoxDriver(); 
    driver.get("http://www.amazon.in"); 
    driver.manage().window().maximize();   

    driver.findElement(By.id("twotabsearchtextbox")).sendKeys("Books"); 
    driver.findElement(By.className("nav-input")).click(); 

    List<WebElement> result = driver.findElements(By.xpath(".//*[@id='atfResults']/ul[@id='s-results-list-atf']/li")); 

    System.out.println(result.size()); 

答えて

0

ページは動的です。つまり、セレンはページが読み込まれたと思うと、コンテンツは実際にページにはまだありません。だから、結果を待つ必要があります。あなたがリスト以来、複数の結果を期待するまで、この場合

、あなたが一度にすべき全ての負荷を待つことができます。

WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds); 
//Note this isn't giving you the titles, it's giving you the entire list item 
By bookSearchResults = By.xpath(".//*[@id='atfResults']/ul[@id='s-results-list-atf']/li"); 

wait.until(ExpectedConditions.numberOfElementsToBeMoreThan(bookSearchResults, 1)); 

//Then continue on as you were 
List<WebElement> result = driver.findElements(bookSearchResults); 
.... 

をまただけではなく、結果を待ってDIV試みることができます。

+0

ありがとうございました!出来た 。 – vijaya

+0

条件が検索結果= 1であるため、すべての要素がロードされるまで待ち状態になることはありません。待ち時間を5秒に変更してから、すべての要素をロードしました。 .. – vijaya

+0

@vijaya興味深い。私は、すべての結果が同じ時間にロードされると思っていたでしょう、良いキャッチ:)あなたが設定したタイムアウトは、必ずしもそれを待つわけではありませんが、あなたが設定した条件、この場合は 'ExpectedConditions.numberOfElementsTo ...'となります。より多くの要素がロードされるのを待つ場合は、 'numberOfElementsToBeMoreThan(elementsBy、amountOfElements)'の2番目のパラメータとしてロードします。これが正解であると思われる場合は、チェックマークを付けてupvoteおよび/または正解として自由にマークしてください。乾杯! – mrfreester

関連する問題