当使用Selenium和Java时,我经常遇到关于陈旧的元素引用的错误。我正在测试的应用程序使用AngularJS 2.0。有时候明确的等待会解决问题,但大多数情况下不会。我可以在我的测试中忽略这些错误吗?我如何实现这个?使用Selenium和Java忽略陈旧的元素引用
-1
A
回答
0
阿夫拉姆,
由于应用程序采用了棱角分明的JS,所以这是我们将获得陈旧元素引用异常在某些情况下,理性的应用程序将加载每次。即使我在使用Angular JS的应用程序自动化时遇到同样的问题。量角器工具是此类应用的最佳工具,因为量角器内置等待,因此我们不需要故意等待。解决这个问题的唯一方法是,地点线程每次都会发现异常。在流利的等待代码中保持忽略Stale元素引用类。
new FluentWait<WebDriver>(driver)
.withTimeout(Time, TimeUnit.SECONDS)
.pollingEvery(
Time,
TimeUnit.SECONDS)
.ignoring(NoSuchElementException.class)
.ignoring(StaleElementReferenceException.class)
.until(new ExpectedCondition<WebElement>() {
public WebElement apply(WebDriver driver) {
return driver.findElement(locator);
1
Angular porting与JAVA可能更适合您的情况。忽略页面状态和AJAX就绪事件并不是一个稳定的解决方案。你甚至可以通过JavascriptExecutor interfrace自己实现角度特定的等待。它允许你在代码中注入自定义JS,所以操纵浏览器。使用这样的:
long start = System.currentTimeMillis();
((JavascriptExecutor) driver).executeScript(
"// your JS code here");
我用those slides时,我不得不这样做在Python,但JS代码保持不变。我们对这个解决方案非常满意。
1
自动化单页面应用程序(SPA)是一个新的挑战,它将推动Selenium WebDriver和相关框架的进一步改进。
在这种情况下,我从SerenityBDD借用的方法waitForAngularRequestsToFinish()
:
public void waitForAngularRequestsToFinish() { if ((boolean) getJavascriptExecutorFacade().executeScript("return (typeof angular !== 'undefined')? true : false;")) { getJavascriptExecutorFacade().executeAsyncScript("var callback = arguments[arguments.length - 1];" + "angular.element(document.body).injector().get('$browser').notifyWhenNoOutstandingRequests(callback);"); } }
什么它使用JavascriptExecutor
执行其通知或仅当存在正在处理没有未决角请求返回异步脚本基本上一样。
相关问题
- 1. Selenium陈旧的元素引用异常Python
- 2. 陈旧的元素引用异常c#Selenium Webdriver
- 3. 使用硒2检查陈旧元素?
- 4. Selenium能够并行等待多个元素陈旧性(Java)吗?
- 5. 使用Java,如何处理WebDriver中的“陈旧元素异常”?
- 6. Selenium XPath - 忽略表格中的元素
- 7. 机器人框架 - Selenium Webdriver - Java:调用全局变量时的陈旧元素引用异常
- 8. Selenium:陈旧元素引用:元素未附加到Python中的页面文档中
- 9. 陈旧的元素参考Selenium Web驱动程序
- 10. 陈旧元素引用异常:如何解决?
- 11. Selenium Webdriver - 刷新陈旧元素快捷方式?
- 12. 获取陈旧元素引用:元素未附加到页面文档异常
- 13. Python-StaleElementReferenceException:消息:陈旧元素引用:元素未附加到页面文档
- 14. 如何使用Selenium通过多个元素,同时避免陈旧的元素错误
- 15. 使用XSL忽略空元素
- 16. 使用JAXB忽略根元素
- 17. 使柔性元素忽略子元素
- 18. 硒webdriver中的陈旧元素异常
- 19. StaleElementReferenceException:陈旧的元素参考:
- 20. 陈旧元素引用例外与Selenium Web驱动程序并行执行测试用例
- 21. Django:在浏览器上使用陈旧元素参考
- 22. 由于陈旧元素参考引起的不稳定测试
- 23. XmlDocument.Load忽略元素?
- 24. 当遍历页面使用for-each循环时硒元素陈旧元素
- 25. 使用Selenium查找clickon元素。 (JAVA)
- 26. 陈旧元素参考错误?
- 27. 陈旧元素参考错误
- 28. 用borderradius忽略元素上的事件
- 29. 如何使用selenium验证在元素X和Z之间存在的元素Y在UI中使用selenium java
- 30. 硒 - 陈旧的元素参考:元素不附加到页面
请阅读[问]和[预计会有多少研究工作?](https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow -users)请提供您已经尝试过的代码和执行结果,包括任何错误消息等。还提供一个指向页面和/或相关HTML的链接。 – JeffC
感谢您的评论,但不幸的是我的问题没有解决一段代码。正如你将通过研究这个话题所发现的那样,它很模糊,记录不完整。从我在AngularJS页面上使用Java的陈旧元素的研究来看,你会得到很多答案,但不幸的是,其中大多数都很糟糕。我的问题再次与一段代码无关,而是一段话题。 –
当然是代码。您正在尝试编写代码来自动化您的应用程序,并避免过时的元素异常等。您提到显式等待,但是您没有提供您尝试过的代码,也没有提供我的评论所针对的特定结果(包括错误消息)。 – JeffC