我想点击列表中的元素。我使用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;
}
}
因为文本包含未知字符所以
li.getAttribute("value").equalsIgnoreCase("foo2")
不会起作用,因为两个字符串不相等。
你可以尝试包含喜欢
li.getAttribute("value").contains("foo2")
我认为你的问题的原因可能是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();
}
您正在使用@FindBy
,它仅返回给定定位器找到的第一个元素。使用@FindBys
获取给定定位器找到的所有元素。
由于之前的答案是错误的,我已经打了它,但保留了它以澄清评论。
您可以直接获取第二个元素而不使用for循环
@FindBy(xpath = "//ol[@class='class1']/li[@class='class2']")
如果没有找到属性,getAttribute()
方法返回null
,并且当存在属性但是它不包含任何值时返回空。