调试脚本在for循环中运行 - Selenium WebDriver

时间:2016-05-23 12:49:08

标签: java selenium-webdriver

考虑以下实施:

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++)时,它就能正常工作。

我想在循环外部初始化我的列表,以便我可以将其限制为列表的大小。一种方法是使用不同的名称制作另一个列表。但那是最好的选择吗?

1 个答案:

答案 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);

    ...
}