Java Selenium Webdriver:未显示正确的Li元素

Java Selenium Webdriver:未显示正确的Li元素,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,在下面的代码中,我希望看到大小为18,但它显示为0。我还不知道为什么 我将搜索书籍,并最终希望将书籍标题存储在一个数组中。谢谢 @Test public void searchTestOne(){ System.setProperty("webdriver.gecko.driver", "C:\\geckodriver\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("http:

在下面的代码中,我希望看到大小为18,但它显示为0。我还不知道为什么

我将搜索书籍,并最终希望将书籍标题存储在一个数组中。谢谢

@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());
@测试
公共无效searchTestOne(){
System.setProperty(“webdriver.gecko.driver”,“C:\\geckodriver\\geckodriver.exe”);
WebDriver=newfirefoxdriver();
驱动程序。获取(“http://www.amazon.in");
driver.manage().window().maximize();
driver.findElement(By.id(“twotabsearchtextbox”).sendKeys(“Books”);
driver.findElement(按.className(“导航输入”))。单击();
List result=driver.findElements(By.xpath(“./*[@id='atfResults']/ul[@id='s-results-List-atf']/li”);
System.out.println(result.size());

页面是动态的,这意味着一旦selenium认为页面已加载,内容实际上还不在页面上。因此,您必须先等待结果

在这种情况下,您可以等待,直到预期会出现多个结果,因为列表应同时加载:

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);
....
WebDriverWait wait=new-WebDriverWait(驱动程序,timeoutingseconds);
//注意,这不是给你标题,而是给你整个列表项
By bookSearchResults=By.xpath(“./*[@id='atfResults']/ul[@id='s-results-list-atf']/li”);
等待.直到(预期条件.元素数超过(bookSearchResults,1));
//然后继续你原来的样子
列表结果=driver.findElements(bookSearchResults);
....

您也可以尝试等待results div。

我注意到等待条件不会等到所有元素都加载,因为条件是search result=1。我将等待时间改为5秒,然后加载所有元素。我只是想告诉..@vijaya有趣。我原以为所有结果都会同时加载时间,好消息:)需要注意的一点是,您设置的超时不一定会等待那么长的时间,但它会等待您设置的条件所需的时间,在本例中为
ExpectedConditions.numberOfElementsTo…
。如果您想等待加载更多的元素,可以将其作为
numberOfElementsToBeMore中的第二个参数Than(elementsBy,amounteflements)
。如果您觉得这是一个正确的答案,请随意投票和/或使用复选标记将其标记为正确答案。干杯!