开发者社区 问答 正文

如何使LI与硒中的UL分离

我试图过滤列表并单击正确的文本。

该列表的大小为2,如下所示:

<ul>
  <li><span>first</span></li>
  <li><span>second</span></li>
</ul>

出于某种原因,我的代码给了我整个UL而不是单独的条目,并且没有遍历内部元素。

public void clickRightThing(String name) {      
    List<WebElement> list = driver.findElements(By.className("ul-classname"));

    String returnedName;

    for (WebElement row : list) {
        returnedName = row.getText();   
        System.out.println(returnedName);
        System.out.println(returnedName.length());

        if (returnedName.equals(name)) {
            row.click();
            return;
        }
    }
}

运行clickRightThing(“ first)”将仅在循环的一次运行中打印出行的名称,大小为11,即第一个+第二个的长度,最后是列表1的大小。由于字符串,它从不输入if语句返回的是两行,而不是第一行。

first 
second 
11 
1

我对其他HTML表格和列表结构使用了类似的方法,所以我不确定哪里出了问题。

展开
收起
垚tutu 2019-12-04 17:05:10 570 分享 版权
阿里云 AI 助理回答

从你的描述来看,问题可能出在定位元素的方式上。你尝试通过类名.ul-classname来找到所有的列表项(li元素),但实际上这个类名很可能属于包含这些列表项的ul元素本身。因此,你现在获取到的是整个无序列表(ul)而不是单独的列表项(li)。

要解决这个问题,你需要直接定位到具体的列表项(li)。假设每个列表项都有一个特定的类名或者标签属性可以帮助你定位,比如类名.list-item,你可以修改代码如下:

public void clickRightThing(String name) {      
    List<WebElement> listItems = driver.findElements(By.className("list-item")); // 假设.list-item是每个列表项的类名

    for (WebElement row : listItems) {
        String returnedName = row.getText();   
        System.out.println(returnedName);
        System.out.println(returnedName.length());

        if (returnedName.equals(name)) {
            row.click();
            return;
        }
    }
}

如果列表项没有特定的类名,你也可以根据它们在DOM中的位置或其他属性来定位,例如使用XPath或CSS选择器。例如,如果你知道所有的列表项都是直接位于某个特定ul下的子元素,你可以使用XPath表达式来定位它们:

List<WebElement> listItems = driver.findElements(By.xpath("//ul[@class='ul-classname']/li"));

请确保替换上述示例中的选择器以匹配你的实际HTML结构。这样,你应该能够正确地遍历每个列表项并点击正确的文本了。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: