當使用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