2017-04-04 2 views
0

Problem-Anweisung: Ich bekomme veraltete Element-Ausnahme, wenn for-Schleife das zweite Mal ausgeführt wird.Stale Element Referenz Ausnahme: Wie zu lösen?

Beschreibung:

I for-Schleife bin mit Tabellenelemente zu handhaben. In der ersten Iteration wird nach dem erforderlichen Element auf der Seite gesucht. Wenn das Element auf dieser Seite nicht verfügbar ist, wird es auf der zweiten Seite gesucht. Webdriver findet das Element erfolgreich, wenn es auf der ersten Seite verfügbar ist, aber wenn es auf der ersten Seite nicht verfügbar ist, sucht es nach dem Element auf der zweiten Seite. Aber hier für die Schleife schlägt mit der Ausnahme namens 'Stale Element Exception'.

Fehlermeldung:

Exception in thread "main" org.openqa.selenium.StaleElementReferenceException: abgestanden Element Referenz: Element nicht auf die Seite Dokument angebracht ist

Code:

List <WebElement> allAmountValues = driver.findElements(By.xpath("(//table[@width=760][@cellspacing=1])[2]/tbody/tr/td[8]/div")); 

    for(int i =0;i<allAmountValues.size();i++){ 
     System.out.println("Value are : "+allAmountValues.get(i).getText().replaceAll("\\s+", " ")); 
    } 



String testValue = "100000"; 
System.out.println("No.of Rows in the Table : "+allAmountValues.size());     

       for (int i1 =1; i1<allAmountValues.size();i1++) { 


        String amount = allAmountValues.get(i1+1).getText().replaceAll("\\s+",""); 
        //System.out.println("amount Values : "+amount); 
        System.out.println("Value are : " + allAmountValues.get(i1).getText() + "== Corresponding link is : " + clicklinks.get(i1).getText()); 

        if (amount.equalsIgnoreCase(testValue)) { 
         System.out.println("Found:" +testValue); 

         clicklinks.get(i1).click(); 
         waitDriver(); 
         driver.navigate().back(); 

         break; 
        } 
        else 
        { 
         WebElement clickNext = driver.findElement(By.xpath("//a[contains(text(), 'Next')]")); 
         clickNext.click(); 


        } 


       } 


       for(int rw=2;rw<allAmountValues.size();rw++) 
       { 
        WebElement a1 = driver.findElement(By.xpath("(//table[@width=760][@cellspacing=1])[2]/tbody/tr["+rw+"]/td[8]/div/span")); 
        String amm = a1.getText().replaceAll("\\s+", ""); 
        System.out.println("Current value is:" +amm); 
        if(amm.equalsIgnoreCase("100000")) 
        { 
         WebElement a2 = driver.findElement(By.xpath("/html/body/form/div/table/tbody/tr/td/table/tbody/tr[5]/td/table/tbody/tr["+rw+"]/td[1]/div/input[6]")); 
         a2.click(); 
         break; 
        } 
       } 
        WebElement authoriseButton = driver.findElement(By.xpath("//input[@name='btnAuthorise']")); 
        if(authoriseButton.isEnabled()) 
        { 
         authoriseButton.click(); 
        } 
        else 
        { 
         System.out.println("Authorise Button is not enabled"); 
        } 


     } 

Ich bin mit veralteten Element Fehler Ausnahme auf:konfrontiertString amount = allAmountValues.get(i1+1).getText().replaceAll("\\s+",""); diese Linie. Jede Hilfe wäre willkommen.

Antwort

1

Ursache:

allAmountValues gespeichert wird zunächst so, wenn Sie zwischen den Seiten bewegen, yoou versuchen, die gleichen Elemente früher gespeichert zu verwenden; hgence verursacht Sie StaleElementException

Lösung:

Sie haben allAmountValues zu identifizieren, wieder nach jedem Mal, wenn Sie eine Seite verlassen und zur ursprünglichen Seite zurück.

+0

Ich habe den Code noch einmal bearbeitet. Bitte prüfe. @Kushal, wie identifiziere ich den Wert für allAmountValues? – Akki

+0

Sie müssen dies erneut ausführen 'Liste allAmountValues ​​= driver.findElements (By.xpath (" (// Tabelle [@ Breite = 760] [@ Zellenabstand = 1]) [2]/tbody/tr/td [8]/div "));' – kushal

+0

Ich fürchte, ich verstehe nicht. Weil es in der Schleife ist. Könnten Sie mir bitte zeigen, wie es geht? – Akki

Verwandte Themen