我试图过滤列表并单击正确的文本。
该列表的大小为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表格和列表结构使用了类似的方法,所以我不确定哪里出了问题。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
从你的描述来看,问题可能出在定位元素的方式上。你尝试通过类名.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结构。这样,你应该能够正确地遍历每个列表项并点击正确的文本了。