考虑以下实施:
WebDriverWait wait = new WebDriverWait(driver, 60);
List<WebElement> countryLinks = driver.findElements(By.cssSelector("a[href*='/country/']"));
for (int i = 75; i < countryLinks.size(); i++) {
wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("a[href*='/country/']")));
Thread.sleep(1000);
WebElement elem = countryLinks.get(i);
JavascriptExecutor js = (JavascriptExecutor) driver;
//this line will scroll to element.
js.executeScript("window.scrollTo(" + elem.getLocation().x + "," + (elem.getLocation().y - 100) + ");");
System.out.println("The Country is: " + elem.getText());
elem.click();
wait.until(ExpectedConditions.visibilityOfElementLocated(countryDetailVerify));
driver.navigate().back();
}
当i = 75时,上面的脚本只运行一次。但是当我在for循环中初始化list并将循环更改为for(int i=75;i<79;i++)
时,它就能正常工作。
我想在循环外部初始化我的列表,以便我可以将其限制为列表的大小。一种方法是使用不同的名称制作另一个列表。但那是最好的选择吗?
答案 0 :(得分:0)
我会在定位器中使用XPath和循环设置索引,直到那时不再有元素:
for(int i = 75; ; i++) {
List<WebElement> countryLinks = driver.findElements(
By.xpath("(//a[contains(@href, '/country/')])[{0}]".format(i)));
if (countryLinks.size() == 0)
break;
WebElement countryLink = countryLinks.get(0);
...
}