我正在使用Java硒创建自动化项目。现在,在我们的Web应用程序中,有一个地址输入框,并具有自动完成功能。问题是输入部分地址后,我们需要从列表中单击选项之一。这是html:
现在我已尝试获取列表。但失败了:
WebElement autoCompelet = driver.findElement(By.xpath("/html/body/ul[1]"));
List<WebElement> options = autoCompelet.findElements(By.tagName("li"));
logger.debug(options.size());
for (WebElement option1 : options) {
logger.debug(option1);
}
我可以打印出来,但是
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("/html/body/ul[1]/li[1]")));
不幸的是,它们都不起作用。有人对此有任何想法吗?任何输入表示赞赏。谢谢你们。
答案 0 :(得分:0)
By.className("li")
无效,该值应为类名,而必须使用By.Name("li")
。
您还可以更改xpath,以按类获取ul
,然后直接获取li
WebElement autoCompelet = driver.findElement(By.xpath("//ul[@class='af_list']"));
List<WebElement> options = autoCompelet.findElements(By.Name("li"));
logger.debug(options.size());
for (WebElement option1 : options) {
logger.debug(option1);
}
答案 1 :(得分:0)
您可以尝试以下操作。
//wait is added in order to check the presence of autocomplete suggestion
WebDriverWait wait=new WebDriverWait(driver,20);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.className("af_list")));
List<WebElement> options = driver.findElements(By.xpath("//ul[@class='af_list']/li"));
logger.debug(options.size());
for (WebElement option1 : options) {
logger.debug(option1.getText());
}
注意:我假设af_list
类名仅在自动完成中使用。如果在其他部分中也使用它,则请共享完整的html详细信息
答案 2 :(得分:0)
您可以尝试这样的操作,将所有<li>
元素都放在一个列表中之后,可以使用getText()
方法轻松地获取每个网络元素的文本,在硒 Java 绑定中可用。
List<WebElement> options = driver.findElements(By.cssSelector("ul.af_list li"));
System.out.println(options.size());
logger.debug(options.size());
for(WebElement options1 : options)
{
logger.debug(options1.getText());
}
请注意,最好在 xpath 上使用 css 选择器。
您可能想为您的方案引入webDriverWait。这将明确地等待所有<li>
元素在列表中出现/可用。
希望这会有所帮助。
答案 3 :(得分:0)
我的Web应用程序具有类似的功能。在这种情况下,可以将sendKeys()
方法与Keys.DOWN
一起使用,逐字转到该元素,然后Keys.ENTER
进行选择。通常,sendKeys()
的一部分文本之后,其他部分开始在下面填充,因此您基本上输入了一定程度的文字,直到填充的下拉文本中的第一个选项才是您想要的那个。然后先进行sendKeys(Keys.DOWN)
,然后进行sendKeys(Keys.ENTER)
答案 4 :(得分:0)
根据您共享的 HTML ,所需元素(即<li>
标签位于<ul>
标签中,该标签具有属性 style =“ display :无;” 。因此,要访问<li>
标签,您可以使用以下解决方案:
WebElement autoCompelet = driver.findElement(By.xpath("//ul[@class='af_list']"));
((JavascriptExecutor)driver).executeScript("arguments[0].removeAttribute('style')", autoCompelet);
List<WebElement> options = autoCompelet.findElements(By.xpath("./li[@class='af_item']"));
for (WebElement option1 : options) {
System.out.println(option1.getText());
}