getAttribute(“value”)返回0

问题描述 投票:0回答:3

我想点击列表中的元素。我使用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;
            }
        }
java selenium
3个回答
0
投票

因为文本包含未知字符所以

  li.getAttribute("value").equalsIgnoreCase("foo2")

不会起作用,因为两个字符串不相等。

你可以尝试包含喜欢

  li.getAttribute("value").contains("foo2")

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

0
投票

您正在使用@FindBy,它仅返回给定定位器找到的第一个元素。使用@FindBys获取给定定位器找到的所有元素。

由于之前的答案是错误的,我已经打了它,但保留了它以澄清评论。

您可以直接获取第二个元素而不使用for循环

@FindBy(xpath = "//ol[@class='class1']/li[@class='class2']")

如果没有找到属性,getAttribute()方法返回null,并且当存在属性但是它不包含任何值时返回空。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.