2017-04-06 113 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); 
.... 

你也可以只嘗試等待結果,而不是股利。

+0

謝謝!有效 。 – vijaya

+0

我注意到等待條件不會等到所有元素都被加載,因爲條件是搜索結果= 1。我將等待更改爲5秒,然後加載所有元素。只是想告訴.. – vijaya

+0

@vijaya有趣。我會認爲所有的結果會同時加載,很好的抓住:)有一點需要注意,你設置的超時時間不一定會等待很長時間,但它會等待你設置的條件達到這段時間,在這種情況下'ExpectedConditions.numberOfElementsTo ...'。如果你想等待更多的元素加載,你可以將它作爲'numberOfElementsToBeMoreThan(elementsBy,amountOfElements)'中的第二個參數。如果您覺得這是一個正確的答案,請隨時註冊並/或將其標記爲正確的答案並帶有複選標記。乾杯! – mrfreester

相關問題