0

我遇到了这种奇怪的情况。

  1. 我首先在第 1 页,其中有一个 id 为“abc”的元素,我使用“abc”查找 webElement 并获取其文本值

  2. 我单击第 1 页中的链接,它会将我带到第 2 页

  3. 在第 2 页中,还有一个 id 为“abc”的元素,当我尝试使用“abc”查找元素并获取其文本值时,webdriver 给了我一个“陈旧元素异常,元素未附加到 DOM 等”

我用谷歌搜索到这个页面,http://docs.seleniumhq.org/exceptions/stale_element_reference.jsp。它解释说“该元素所属的页面是否已刷新,或者用户已导航到另一个页面......驱动程序无法确定替换实际上是预期的”

那么如何解决这类问题呢?理论上,webdriver 没有办法知道这些元素在两个不同的页面中。

值得注意的是,如果我在页面切换之间插入硬编码延迟(线程睡眠等),则不会出现过时的问题。

谢谢,

4

2 回答 2

0

陈旧元素是已从页面中删除的元素。因此,在您的情况下,您可能会在文档更新之前获取元素。为避免这种情况,您可以先等待元素变得陈旧,然后再获取新元素:

// get the element
WebElement element = driver.findElement(By.id("abc"));

// trigger the update of the document
driver.findElement(By.id("my-button")).click();

// wait for the element to become stale
WebDriverWait wait = new WebDriverWait(driver, 20);
wait.until(ExpectedConditions.stalenessOf(element));

// get the new element
WebElement element = driver.findElement(By.id("abc"));
于 2016-05-19T16:38:22.547 回答
0

嗨,如果你想摆脱陈旧元素异常,请按照下面的方式进行操作

// Case one - when you are simply calling firstPageText two time
// then before calling it on the next page please re identify it 
// to get rid of stale element exception.

   String firstPageText =  driver.findElement(By.id("abc")).getText();
   System.out.println("Text on the first page is : " + firstPageText);

   driver.findElement(By.linkText("to second page ")).click();

   String secondPageText =  driver.findElement(By.id("abc")).getText();
   System.out.println("Text on the Second page is : " + secondPageText );

此外,如果您创建了一个执行上述场景的方法,那么为避免上述错误,请制作两种单独的方法,一种用于第 1 页,另一种用于第 2 页,两者都有其单独的识别策略。

于 2016-05-19T13:39:58.503 回答