使用Selenium处理刷新WebElement

时间:2017-08-01 13:08:29

标签: java selenium

我正在测试由多个框架组成的网站。即使没有更改元素,服务器也可以随时重新生成帧。如果在

期间发生这种情况
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 个答案:

答案 0 :(得分:2)

编写一个为您执行此操作的函数,以使代码看起来不那么臃肿,但我不相信有更好的方法来解决此问题。

这里有一篇很好的博客文章:StaleElementException

答案 1 :(得分: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
  3. http://www.seleniumhq.org/exceptions/stale_element_reference.jsp