2017-08-29 1 views
-1

私はStaleElementReferenceExceptionを取得しています。私は明示的な待機を使用して、例外を無視し、このフォーラムの同様の質問で提案された要素がクリック可能であるのを待ちます。ref:How to avoid "StaleElementReferenceException" in Selenium?要素がキャッシュに見つかりませんでした - おそらく、ページが参照されてから変更されました

public class AdminInterface { 

    @Test(priority=1) 
    public void adminToUserInterface() throws InterruptedException 
    { 
WebDriver driver = new FirefoxDriver(); 

     driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 

     driver.get("http://www.gcrit.com/build3/admin"); 
     driver.findElement(By.xpath("//a[text()='Online Catalog']")).click(); 
     String str = "welcome"; 
     String str1 = (driver.findElement(By.xpath("//div[@id='bodyContent']/div[1]/div[1]")).getText()).toLowerCase(); 
     if(str1.contains(str)) 
      System.out.println("Redirecting to user interface from admin interface successfull == PASS"); 
     else 
      System.out.println("Redirecting to user interface from admin interface failed == FAILED"); 
     Thread.sleep(2000); 
     driver.close(); 
    } 
    @Test(priority=2) 
    public void loginTest() throws InterruptedException 
    { 

     WebDriver driver = new FirefoxDriver(); 

     driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 

     driver.get("http://www.gcrit.com/build3/admin"); 
     driver.findElement(By.name("username")).sendKeys("admin"); 
     driver.findElement(By.name("password")).sendKeys("[email protected]"); 
     driver.findElement(By.id("tdb1")).click(); 

     String str = "Catalog"; 
     String str1=driver.findElement(By.xpath("//div[@id='adminAppMenu']/h3[1]/a")).getText(); 

     if(str.equals(str1)) 
      System.out.println("Login was successful==PASS"); 
     else 
      System.out.println("Login was not successful==FAIL"); 
     Thread.sleep(2000); 
     driver.close(); 

    } 

    @Test(priority=3,dependsOnMethods={"loginTest"}) 
    public void addManufacturer() throws InterruptedException 
    { 

     WebDriver driver = new FirefoxDriver(); 
     driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 

     driver.get("http://www.gcrit.com/build3/admin"); 
     driver.findElement(By.name("username")).sendKeys("admin"); 
     driver.findElement(By.name("password")).sendKeys("[email protected]"); 
     driver.findElement(By.id("tdb1")).click(); 
     driver.findElement(By.xpath("//a[text()='Manufacturers']")).click(); 
     driver.findElement(By.xpath("//span[text()='Insert']")).click(); 
     driver.findElement(By.name("manufacturers_name")).sendKeys("AA1"); 
     driver.findElement(By.id("tdb1")).click(); 
     String str = "AA1"; 
     List<WebElement> tds =driver.findElements(By.tagName("td")); 
     Iterator <WebElement> itr = tds.iterator(); 
     while(itr.hasNext()) 
     { 
      if((itr.next().getText()).equals(str)) 
        { 
        System.out.println("Manufacturer creation was successfull==PASS"); 
        } 

     } 
     Thread.sleep(4000); 
     driver.close(); 



    } 
    @Test(priority=4,dependsOnMethods={"addManufacturer"}) 
    public void editManufacturer() throws InterruptedException 
    { 

     WebDriver driver = new FirefoxDriver(); 
     driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 

     driver.get("http://www.gcrit.com/build3/admin"); 
     driver.findElement(By.name("username")).sendKeys("admin"); 
     driver.findElement(By.name("password")).sendKeys("[email protected]"); 
     driver.findElement(By.id("tdb1")).click(); 
     driver.findElement(By.xpath("//a[text()='Manufacturers']")).click(); 
     String str = "AA1"; 
     List<WebElement> lst = driver.findElements(By.tagName("td")); 
     Iterator<WebElement> itr = lst.iterator(); 
     while(itr.hasNext()) 
     { 
      if((itr.next().getText()).equals(str)) 
        { 
        itr.next().click(); 
        } 
     } 

     new WebDriverWait(driver,20).ignoring(StaleElementReferenceException.class).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@id='tdb2']/span[2]"))); 
     driver.findElement(By.xpath("//a[@id='tdb2']/span[2]")).click(); 
     driver.findElement(By.name("manufacturers_name")).sendKeys("AA2"); 
     driver.findElement(By.id("tdb1")).click(); 
     String str1="AA2"; 
     List<WebElement> lst1 = driver.findElements(By.tagName("td")); 
     Iterator<WebElement> itr1 = lst1.iterator(); 

     while(itr1.hasNext()) 
     { 
      int i =0; 
      if((itr1.next().getText()).equals(str1)) 
      { 
       System.out.println("The manufacturer "+str+"'s name was successully changed to "+str1+"==PASS"); 
       i++; 
      } 
      if(i==0) 
      { 
       System.out.println("The manufaturer "+str+"'s name could not be changed"); 
      } 
     } 
     Thread.sleep(4000); 
     driver.close(); 
    } 

    @Test(priority=5,dependsOnMethods={"editManufacturer"}) 
    public void deleteManufaturer() throws InterruptedException 
    { 

     WebDriver driver = new FirefoxDriver(); 
     driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS); 

     driver.get("http://www.gcrit.com/build3/admin"); 
     driver.findElement(By.name("username")).sendKeys("admin"); 
     driver.findElement(By.name("password")).sendKeys("[email protected]"); 
     driver.findElement(By.id("tdb1")).click(); 
     driver.findElement(By.xpath("//a[text()='Manufacturers']")).click(); 
     String str = "AA2"; 
     List<WebElement> lst = driver.findElements(By.tagName("td")); 
     Iterator<WebElement> itr = lst.iterator(); 
     while(itr.hasNext()) 
     { 
      if((itr.next().getText()).equals(str)) 
        { 
        itr.next().click(); 
        } 
     } 

     new WebDriverWait(driver,20).ignoring(StaleElementReferenceException.class).until(ExpectedConditions.elementToBeClickable(By.xpath("//span[text()='Delete']"))); 
     driver.findElement(By.xpath("//span[text()='Delete']")).click(); 



     driver.findElement(By.id("tdb1")).click(); 
     List<WebElement> lst1 = driver.findElements(By.tagName("td")); 
     Iterator<WebElement> itr1= lst1.iterator(); 
     int i=0; 
     while(itr1.hasNext()) 
     { 
      if((itr1.next().getText()).equals(str)) 
      { 
       System.out.println("Deleting the manufaturer "+str+" was unsuccessful == FAIL"); 
       i=1; 
      } 
     } 
     if(i==0) 
     { 
      System.out.println("Deleting the manufacturer "+str+" was successful == PASS"); 
     } 
    } 


} 
+0

正確に例外はありますか? – Guy

+0

@Guy第4回テストでは、 driver.findElement(By.xpath( "// a [@ id = 'tdb2']/span [2]"))。 –

+1

[mcve]を入力してください。誰もその多くのコードを読むつもりはない。 – SiKing

答えて

0

ガイズ以下は、私はこの質問のための解決策を見つけました。 jvmは、クリックアクションの後にwhileループの内側で使用可能なすべての要素を繰り返していました。エレメントが見つかるとループから分岐するためには 'break'ステートメントを使用する必要があります。

オリジナルコード:以下のコードを参照してください

while(itr.hasNext()) 
 
     { 
 
      if((itr.next().getText()).equals(str)) 
 
        { 
 
        itr.next().click(); 
 
        break; 
 
        } 
 
     }

同じ:@Test 4

while(itr.hasNext()) 
 
     { 
 
      if((itr.next().getText()).equals(str)) 
 
        { 
 
        itr.next().click(); 
 
        } 
 
     }

更新されたコードに5回目のTestScriptが始まります。

1

の代わりに -

driver.findElement(By.xpath("//a[@id='tdb2']/span[2]")).click(); 

てみコード -

element = driver.findElement(By.xpath("//a[@id='tdb2']/span[2]")); 
JavascriptExecutor executor = (JavascriptExecutor)driver; 
executor.executeScript("arguments[0].click();", element); 
+0

ありがとうございます@あなたの提案は、この質問に非常に手抜きだった。 私がした間違いは、whileループでclickステートメントの後に 'break'を追加するのを忘れたことでした。テストの実行はwhileループの内側で止まっていました。 –

関連する問題