我想单击列表中的元素。我正在使用getAttribute(“ value”)来获取文本,但它返回0,因此未单击该元素。请帮忙。
DOM结构
<ol class ="class1">
<li value="foo1" class="class2">
<li value="foo2" class="class2">
</ol>
Xpath:
@FindBy(xpath = "//ol[@class='class1']/li")
List<WebElement> tagList;
我尝试过getText(),但是它返回文本以及未知字符,因为该元素与文本一起具有图标。
这是我的代码
public void selectTag() {
addReservationBtn.click();
tags.click();
for(WebElement li : tagList) {
// System.out.println(li.getAttribute("value"));
if (li.getAttribute("value").equalsIgnoreCase("foo2")) {
li.click();
break;
}
}
答案 0 :(得分:0)
您正在使用 @FindBy
,该方法仅返回给定定位符找到的第一个元素。使用@FindBys
获取给定定位符找到的所有元素。
由于先前的答案是错误的,因此我删除了它,但保留了 评论的澄清。
您可以直接获取第二个元素,而无需使用
的for循环。@FindBy(xpath = "//ol[@class='class1']/li[@class='class2']")
如果没有找到属性,则getAttribute()
方法将返回null
;如果存在一个属性但其中不包含任何值,则该方法将返回空。
答案 1 :(得分:0)
由于文本包含未知字符,因此
li.getAttribute("value").equalsIgnoreCase("foo2")
由于两个字符串不相等而无法工作。
您可以尝试包含类似内容
li.getAttribute("value").contains("foo2")
答案 2 :(得分:0)
我认为您问题的原因可能是 1. xpath错误或2.等待
// get second <li> using correct xpath
@FindBy(xpath = "//ol[@class='class1']/li[2]")
List<WebElement> tagList;
public void selectTag() {
addReservationBtn.click();
tags.click();
// waitforliTextToAppearAfterClick();
if (tagList.get(1).getAttribute("value").trim().equalsIgnoreCase("foo2")) {
tagList.get(1).click();
}