2016-05-23 87 views
0

考虑以下实现:调试脚本 - 硒的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循环更改为for(int i=75;i<79;i++),那么它工作正常。

我想初始化我的列表以外的循环,以便我可以限制它到我的列表的大小。一种方法是用另一个名字制作另一个列表。但这是最好的选择吗?

回答

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

    ... 
}