如果在等待条件中标识了WebElement,则下面的代码无法标识这些WebElement的列表。我得到了一个异常timeoutexception,无法识别指定xpath的元素。
但是,如果我不带等待条件直接访问元素,那么值就被分配给list变量,这是为什么呢?
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver();
driver.get("https://www.finance.yahoo.com");
driver.manage().window().maximize();
driver.findElement(By.xpath("//input[@id='yfin-usr-qry']")).sendKeys("nclh");
WebDriverWait wait = new WebDriverWait(driver,5);
List<WebElement>dd_list= wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//ul[@class='modules_list__1zFHY']/li")));
System.out.println(dd_list.size());
for(WebElement ele : dd_list) {
if (ele.getText().contains("NCLH.VI")) {
System.out.println("i got the element");
}
}
2条答案
按热度按时间e5njpo681#
为什么会这样?
目标元素永远不会同时显示。xpath返回15个元素,其中只有10个可见。意味着你的条件永远不会满足(因此超时例外)。只需优化xpath,以便针对您感兴趣的元素:那些具有可见使命的元素,例如。
"//ul[@class='modules_list__1zFHY']/li[@data-type='quotes']"
5cg8jx4n2#
yahoo finance网站包含启用JS的元素。所以你需要诱导webdriverwait
document.readyState
成为complete
您可以使用以下定位器策略:代码块:
控制台输出:
浏览器快照: