在循环中打开每个 link (Selenium)

Open every link in loop (Selenium)

我绞尽脑汁想找到它是如何工作的。我试图通过 link 强制 Selenium 打开 link,但它一次又一次地在第一个 link 上打开,控制台输出显示循环工作正常。尝试使用 while 循环,但它也不起作用。我试图在 link 之后打开 link 并更改 li 元素的编号以进一步打开 link.

for (int footer_links = 1; footer_links < 6; footer_links++) {
    WebElement self_service_bi = driver.findElement(By.xpath("//div/div/ul/li['$footer_links']/a"));
    self_service_bi.click();
    File srcFile1 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    File targetFile1 = new File("D:\DataPineScreenshots\" + driver.getTitle() + ".png");
    FileUtils.copyFile(srcFile1, targetFile1);
    driver.navigate().back();
    System.out.print(footer_links + "\n");
}

driver.findElement 总是 return 类型的第一个元素。使用 driver.findElements 函数获取所有匹配给定 xpath 的列表。 但是不要在循环中这样做,因为每次它都会打开相同的 link。 试一试:

List<String> lstUrls = new ArrayList<String>();
List<WebElement> lstEle = driver.findElements(By.xpath("//div/div/ul/li['$footer_links']/a"));
for (WebElement element : lstEle)
    lstUrls.add(element.getAttribute("href"));

for (String string : lstUrls) {
    driver.get(string)
    File srcFile1 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
    File targetFile1 = new File("D:\DataPineScreenshots\" +  driver.getTitle() + ".png");
    FileUtils.copyFile(srcFile1, targetFile1);
    driver.navigate().back();
    System.out.print(footer_links + "\n");
}

修正你的语法

By.xpath("//div/div/ul/li['$footer_links']/a")

来自

By.xpath("//div/div/ul/li[" + footer_links + "]/a")