8

是否可以循环li遍历<ul> </ul>. 假设我有未知数量的li元素,因此循环它们的一种方法是强加一个for具有最大可能lis 数(例如 100)的循环,然后强加try and catch.

try{
for (int i=0; i<100; i++) {
 driver.findElement(By.xpath("//div[@id='...']/ul/li[i]"));
}
}
catch {...}

但是,它不承认i索引吗?我怎样才能让它识别它?

有没有更好的办法?

4

4 回答 4

29

Webdriver has findElements API, which can be used for this purpose..

List<WebElement> allElements = driver.findElements(By.xpath("//div[@id='...']/ul/li")); 

for (WebElement element: allElements) {
      System.out.println(element.getText());
}
于 2013-04-22T18:47:46.870 回答
0

您的目的是让所有 li 都在 ul 中。所以它需要先定位ul,然后再定位ul中的所有li。您可以使用以下 Selenium Java 代码来完成:

WebElement ul_element = driver.findElement(By.xpath("//ul[@class='list-unstyled']"));
        List<WebElement> li_All = ul_element.findElements(By.tagName("li"));
        System.out.println(li_All.size());
        for(int i = 0; i < li_All.size(); i++){
            System.out.println(li_All.get(i).getText());
        }
        //OR
        for(WebElement element : li_All){
            System.out.println(element.getText());
        }
于 2017-06-19T14:18:20.463 回答
0
List<WebElement> allElements = driver.findElements(By.xpath("//div[@id='...']/ul/li"));
int s=allElements.size();
for(int i=1;i<=s;i++){
    allElements = driver.findElements(By.xpath("//div[@id='...']/ul/li"));
    allElements.get(i).click();
}

用这个

于 2016-11-10T10:22:35.420 回答
-1

如果您i像这样将索引从字符串中取出,您的初始代码可能会起作用:

try {
    for (int i=0; i<100; i++) {
        driver.findElement(By.xpath("//div[@id='...']/ul/li["+i+"]"));
    }
}
catch {...}
于 2014-10-16T18:13:09.540 回答