getAttribute(“ value”)返回0

时间:2019-04-17 11:15:22

标签: java selenium

我想单击列表中的元素。我正在使用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;
            }
        }

3 个答案:

答案 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(); 
  }