这是一个奇怪的人。我正在使用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
答案 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();