2016-06-28 9 views
-1

Ich verstehe, dass diese Frage paar Male gefragt wurde, aber ich habe versucht, die meisten Lösungen und schließlich posten ... wenn verpasst, bitte direkt mir danke.Selen - Fehler kann nicht festgestellt werden java.lang.IndexOutOfBoundsException: Index: 92, Größe: 92

Ich versuche, eine Seite zu gehen und alle Links in einem Tag ('a') und klicken Sie auf jede greifen angezeigt Link aus irgendeinem Grund bin ich immer

java.lang.IndexOutOfBoundsException: Index: 92 , Größe: 92

public static void clickOnEachLinkOnAPage(String tagName, String homePageTitle) { 

    int numberOfElementsFound = getNumberOfElementsFound(By.tagName(tagName)); 
    System.out.println(numberOfElementsFound); 
    for (int pos = 0; pos < numberOfElementsFound; pos++) { 

     if (getElementWithIndex(By.tagName(tagName), pos).isDisplayed()) { 
      String linkText = getElementWithIndex(By.tagName(tagName), pos).getText().trim(); 
      String url = getElementWithIndex(By.tagName(tagName), pos).getAttribute("href"); 
     if (linkText.length()!=0) { 
       getElementWithIndex(By.tagName(tagName), pos).click(); 
       String newWindow = driver.getWindowHandle(); 
       Generic.handleMultipleWindows(newWindow); 
       String pageTitle = driver.getTitle(); 
       linkText = StringUtils.abbreviate(linkText, 10); 
       System.out.println(pos +","+linkText+","+url+","+pageTitle); 
       // System.out.println(linkText+","+url+","+pageTitle); 
       closeAllOtherWindows(newWindow); 
      System.out.println("number of elements"+numberOfElementsFound); 
       if(!pageTitle.equals(homePageTitle)) { 
        driver.navigate().back(); 
       } 
      } 
     } 
    } 
} 



public static int getNumberOfElementsFound(By by) { 
    return driver.findElements(by).size(); 
} 


public static WebElement getElementWithIndex(By by, int pos) { 
    return driver.findElements(by).get(pos); 
} 

    public static boolean closeAllOtherWindows(String openWindowHandle) { 
    Set<String> allWindowHandles = driver.getWindowHandles(); 
    for (String currentWindowHandle : allWindowHandles) { 
     if (!currentWindowHandle.equals(openWindowHandle)) { 
      driver.switchTo().window(currentWindowHandle); 
      driver.close(); 
     } 
    } 

    driver.switchTo().window(openWindowHandle); 
    if (driver.getWindowHandles().size() == 1) 
     return true; 
    else 
     return false; 
} 

    public static void handleMultipleWindows(String windowTitle) { 
    Set<String> windows = driver.getWindowHandles(); 

    for (String window : windows) { 
     driver.switchTo().window(window); 
     if (driver.getTitle().contains(windowTitle)) { 
      return; 
     } 
    } 
} 

Fehler I

java.lang.IndexOutOfBoundsException bin immer: Index: 92, Größe: 92

+0

Sie den Index 92 mit einer Anordnung des 92. Indexgröße Zugriff auf 92 existiert nicht, weil Arrays Null – Li357

+0

basieren, die Linie diesen Fehler verursacht? Ich vermute die Ursache ist, dass einige Links nach dem Laden der Seite entfernt werden. – Buaban

+0

Wenn ich im Debug-Modus laufen - mein Test schlägt bei if (getElementWithIndex (By.tagName (tagName), pos) .isDisplayed()) { – user790049

Antwort

0

ich habe meinen Code wie unten festgelegt und arbeitet fin e ... Danke euch allen. Ich habe mich ein bisschen verändert, damit es funktioniert.

public static void clickOnEachLinkOnAPage(String tagName, String homePageTitle) { 

    int numberOfElementsFound = getNumberOfElementsFound(By.tagName(tagName)); 
    // System.out.println(numberOfElementsFound); 
    String currentWindow = driver.getWindowHandle(); 
    for (int pos = 0; pos < numberOfElementsFound; pos++) { 
     String linkText = getElementWithIndex(By.tagName(tagName), pos).getText().trim(); 
     if (linkText.length() != 0) { 
      String url = getElementWithIndex(By.tagName(tagName), pos).getAttribute("href"); 
      getElementWithIndex(By.tagName(tagName), pos).click(); 
      String newWindow = driver.getWindowHandle(); 
      Generic.handleMultipleWindows(newWindow); 
      String pageTitle = driver.getTitle(); 
      linkText = StringUtils.abbreviate(linkText, 10); 
      // System.out.println(pos +","+linkText+","+url+","+pageTitle); 
      System.out.println(linkText + "," + url + "," + pageTitle); 
      closeAllOtherWindows(newWindow); 
      Generic.handleMultipleWindows(currentWindow); 
      String pageTitleCurrent = driver.getTitle(); 
      if (!pageTitleCurrent.equals(homePageTitle)) { 
       driver.navigate().back(); 
      } 
     } 
    } 
} 
Verwandte Themen