JavaでSeleniumを使用すると、古い要素参照に関するエラーが頻繁に発生します。私がテストしているアプリケーションは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");
私はPythonでそれをしなければならなかったときthose slidesを使用しましたが、JSコードは同じまま。私たちはこのソリューションに満足しています。
1
自動化シングルページアプリケーション(SPA)は新しい課題であり、Selenium WebDriverと関連するフレームワークのさらなる改善を推進します。このようなシナリオで
は、私がSerenityBDDからメソッドwaitForAngularRequestsToFinish()
を借りる:
JavascriptExecutor
が通知または処理されている保留中の角度の要求が存在しない場合にのみ、返す非同期のスクリプトを実行して使用している何
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);"); } }
。
関連する問題
- 1. Webdriverjsノースリープ文古い要素参照
- 2. Robot Framework - Selenium Webdriver - Java:グローバル変数を呼び出すときの古い要素参照例外
- 3. Selenium Stale要素の参照例外Python
- 4. Selenium:古い要素の参照:要素がPythonのページ文書に添付されていません
- 5. Intellisenseアセンブリ参照を無視する
- 6. Selenium WebDriver(Java)の別のWeb要素を参照して要素をクリックする方法は?
- 7. のJavaセレン古い要素
- 8. Selenium Java refresh要素
- 9. 私のプログラムの古い要素参照エラーを克服する方法
- 10. mousemoveで子要素を無視する
- 11. JQueryでASP.NET要素を参照する
- 12. Javaで参照型配列の要素にアクセスする
- 13. Apache Velocityテンプレート言語 - 無効な参照を無視する
- 14. 古いクッキーを無視するASP.Netコア
- 15. 古いUDPパケットを無視するPython
- 16. 古い要素の参照:新しいページを読み込んだ後に要素がページ文書に添付されていない[python] [selenium]
- 17. xsl-foの要素を参照する
- 18. RadListViewの要素を参照するitemtemplate
- 19. XML要素を参照する兄弟
- 20. Angular2 Formbuilder - FormArray要素を参照する
- 21. Java |ガベージコレクタが参照なしの配列メモリを無視する方法
- 22. 角2子/要素参照を参照同じ要素を2回選択
- 23. 要素を無視することは可能ですか?relative?
- 24. Selenium Web Driver古くなった参照例外
- 25. OpenQA.Selenium.StaleElementReferenceException古い要素参照:要素がページ文書に添付されていません
- 26. 古い要素の参照:要素がページ文書に添付されていません。クロムブラウザのセレンのwebdriver
- 27. 古い要素の参照:要素がドロップダウンリストのページ文書に添付されていません - python
- 28. XML要素階層参照
- 29. サプリでリストに欠けている要素を無視する
- 30. selenium.common.exceptions.StaleElementReferenceException:メッセージ:古い要素参照:要素は、私がページにスクロールするクロムとActionChainsでページを開くには、DOM要素とSeleniumを移動するにはPythonの美しいスープを使用するページの文書
[お問い合わせ]と[どのくらいの研究努力が必要ですか?](https://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow)をお読みください。 -users)試したコードとエラーメッセージなどの実行結果を提供してください。ページや関連するHTMLへのリンクも提供してください。 – JeffC
ご意見ありがとうございますが、残念ながら私の質問はコードの一部を扱っていませんでした。そしてこのトピックを研究することでわかるように、それは非常に漠然としていて、文書化されていません。 AngularJSのページでJavaを使った古い要素の調査から、あなたはたくさんの答えを得ることができましたが、残念ながらそれらのほとんどはかなり悪いです。再び私の質問は、コードに関連するものではなく、トピックへのアプローチでした。 –
もちろんコードです。あなたはアプリケーションを自動化するコードを書こうとしています。古い要素の例外などを避けるために、明示的な待ち時間について言及していますが、あなたが試したコードやコメント(エラーメッセージを含む) – JeffC