2017-08-01 48 views
1

我正在測試由多個框架組成的網站。即使沒有元素更改,服務器也可以隨時重新生成一個幀。如果在用Selenium刷新WebElement

driver.findElement(By.id("11")).getText(); 
findElement和的getText之間

出現這種情況,一個StaleElementExcpetion被拋出。我目前的解決方案是多次重試。

for (int i = 0; i < 3; i++) { 
    try { 
     driver.findElement(By.id("11")).getText(); 

    } catch (StaleElementException e) { 
     // retry 
    }  
} 

這真的會讓代碼膨脹,任何更好的解決方案?

回答

2

編寫一個函數可以讓你的代碼看起來不那麼臃腫,但我不認爲有更好的方法來解決這個問題。

一個好的博客文章在這裏:StaleElementException

0

首先,我們必須在這幀的gettext的存在識別,然後切換到特定的幀,然後找到元素。

語法:

driver.switchTo().frame("frameName"); //name of the frame 
    driver.switchTo().frame(1); //index 

例子:

 driver.switchTo().frame(1); 
    driver.findElement(By.xpath("//p")).getText(); 
    driver.switchTo().defaultContent(); 

注:

 driver.switchTo().defaultContent(); //Used default frame, I.E. If there are three frames in one page named as 1,2,3. If you want to switch from frame 2 to frame 3, In that case we are not able to switch directly to the frame 3, In this case what we have to do is 
    driver.switchTo().frame("2"); //frame 2 
    driver.switchTo().defaultContent();// main window - (Default page) while loading webpage 
    driver.switchTo().frame("3"); //frame 3 

請找出原因如下路徑:StaleElementException

  1. 該元素已被完全刪除。
  2. 的元件不再連接到DOM

http://www.seleniumhq.org/exceptions/stale_element_reference.jsp

相關問題