JAVA Selenium - 在循环中从 html 获取 href

JAVA Selenium - getting hrefs from html in a loop

我正在尝试获取页面上几个相似元素的 href,然后在这些 href 中找到最后创建的(最大)id。我有一个循环,但它只找到第一个元素而不会搜索其余元素。你知道里面写错了什么吗?

ArrayList<Integer> tablicas = new ArrayList<Integer>();
    int i;
    for(i = 0; i < 90; i++) {
        String s = driver.findElement(By.cssSelector("a.linkOffer")).getAttribute("href");
        String p = s.substring(19, s.length());             
        int numer = Integer.parseInt(p);    
        System.out.print(p);

        for(int indeks : tablicas) {
            if(indeks == numer) {
                continue;
            } else {
                tablicas.add(numer);
        }
        }
        } System.out.print(tablicas);

您的代码段中存在多个错误。

driver.FindElement() 将 return 一个 WebElement。 - 由于您的 css 选择器对于循环的每次迭代都是相同的,因此它将始终 return 相同的 WebElement。

将循环更改为如下内容:

for(WebElement el : driver.findElements(By.cssSelector("a.linkOffer"))) {
    String target =  el.getAttribute("href");        
    ..
}

如果要查找包含文本 'Nowa oferta dokument' 的所有元素,请使用 driver.findElements(这将 return 符合搜索条件的元素列表)而不是 findElement 并遍历所有元素。

ArrayList<Integer> tablicas = new ArrayList<Integer>();

java.util.List<WebElement> elements = driver.findElements(By.xpath("//*[text()='Nowa oferta dokument']"));

for(WebElement element : elements)
{
 element.getAttribute("href");
 String p = s.substring(19, s.length());             
 int numer = Integer.parseInt(p);    
 System.out.print(p);

 for(int indeks : tablicas) {
  if(indeks == numer) {
    continue;
   } 
  else {
    tablicas.add(numer);
   }
 }
}
System.out.print(tablicas);

希望对您有所帮助。