我一直在搞乱这个选项页面的自动化,因为它提供了各种各样的选项,每个选项都有自己的子选项,我不想花时间通过xpath识别和声明所有元素(或css ..或者或)。所以我有这个可靠的代码,可以很好地找到html标签中的文本标识符。
public void selectAnOption(String option) {
List<WebElement> choice = driver.findElements(By.xpath("//div[@class='atcui-scrollPanel-wrapper']/ul/li"));
for(WebElement e : choice){
System.out.println(e.getText());
if(e.getText().equals(option)){
e.click();
break;
}
}
}
通过运行此操作,我得到了一个类似
的打印输出里程
传送
等等......所以热潮!我知道它们已被识别,但我的e.click()实际上并未点击。我开始测试时没有出现任何错误,只是说它已经通过,但按钮实际上从未被点击过。下面是我正在使用的html片段,你可以看到它是如何嵌套的。
答案 0 :(得分:1)
对于Java 8及更高版本,您可以使用:
public void selectAnOption(String option) {
List<WebElement> choice = driver.findElements(By.xpath("your_xpath"));
choice
.stream()
.filter(e->e.getText().equals(option))
.findFirst().get().click();
}
答案 1 :(得分:0)
修复了..对于任何有类似问题的人,我认为这是因为当开发这个HTML代码时,会有多余的空间(用于设计目的或在开发期间适合元素......可能?)所以我使用.contains而不是.equals。咄!!
public void selectAnOption(String option) {
List<WebElement> choice = driver.findElements(By.xpath("//div[@class='atcui-scrollPanel-wrapper']/ul/li"));
for(WebElement e : choice){
System.out.println(e.getText());
if(e.getText().contains(option)){
e.click();
break;
}
}
}