Selenium在WaitForElement之后抛出“元素不再有效”

时间:2014-09-10 12:03:25

标签: c# asp.net selenium selenium-webdriver

这是一个奇怪的人。我正在使用Selenium WebDriver和IE11以及一个C#testcase我写作。

      driver.Navigate().GoToUrl("testpage.aspx");
      WaitUtility.WaitForElement(By.Id("HEADER_ID"));    //Waits for element to be present
      var element = Driver.FindElement(By.Id("HEADER_ID"));  //fetches the element
      Assert.IsTrue(element.Displayed); //verifies that the element is present

奇怪的是,上面的代码将成功运行WaitForElement命令(这应该意味着元素存在),但element.Display方法将返回false。

所以Selenium等待一个元素存在然后继续然后抛出一个错误,说错误不存在。

-

额外信息: 有时测试用例会毫无问题地执行。 有时,它会返回"元素不再有效/ Stale元素引用异常,我在这里研究了StackOverflow但是没有示例似乎适用于我的情况,因为这个异常通常在DOM对象时抛出已经使用相同的定义属性重新创建了,但在我的情况下,使用WaitForElement方法成功定位了对象,我无法想象在下一个方法之前我的元素已经重新创建或未连接到DOM#34 ; element.Displayed"被称为。

Selenium version: x64 Selenium InternetExplorerDriver 2.42.0
OS: Windows 7
Browser: Internet Explorer 11
Browser version: 11.0.9600

2 个答案:

答案 0 :(得分:1)

我没有足够的代表发表评论 - 我担心这不是答案/解决方案。

但是......我想我遇到了类似的事情。我等到元素存在,然后尝试单击/使用相同的元素。如果它超过了等待,那就意味着元素存在,但是点击失败了。页面上没有其他内容发生变化。但我正在使用remotewebdriver和Python绑定Chrome和FireFox。远程机器(Ubuntu VM)和本地机器(W7Pro)都是64位。

当我搜索类似的例子时,我发现了这个:

Python Selenium WebDriverWait and Click inconsistently giving StaleElementReferenceException()

......这是同样的症状。还在使用Python。但不使用远程驱动程序。

所以在所有三个实例中似乎的问题都是相同的。虽然设置略有不同。

我从来没有找到解决方案。就我所知,链接上面的那个人也没有。

所以我很想知道你是否随处可见!

答案 1 :(得分:0)

通过Actions交互成功解决了这个问题: 使用OpenQA.Selenium.Interactions;

Actions action = new Actions(driver);       action.MoveToElement(xrmBrowser.Driver.FindElement(By.XPath(“ // span [contains(text(),'Contacts')]”)))))。Click()。Build()。Perform();