2016-05-23 5 views
0

Betrachten Sie die folgende Umsetzung:Debugging-Skript für Schleife laufen in - Selen 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(); 
} 

Above Skript nur einmal ausgeführt wird, wenn i = 75. Aber wenn ich Liste initialisieren innerhalb for-Schleife und wechseln Sie in for(int i=75;i<79;i++) for-Schleife, dann funktioniert es richtig.

Ich möchte meine Liste außerhalb for-Schleife initialisieren, so dass ich es auf die Größe meiner Liste beschränken kann. Eine Möglichkeit besteht darin, eine andere Liste mit einem anderen Namen zu erstellen. Aber ist das die beste Option?

Antwort

0

I würde den Index in dem Locator mit einer XPath und Schleife, bis dann gesetzt sind, nicht mehr Elemente:

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

    ... 
}