私もかつてこの問題に遭遇しましたが、知らないうちにページ上で BackboneJS が実行されており、私がクリックしようとしていた要素がそれによって置き換えられました。私のコードは次のとおりです。
これは、もちろん機能的には以下のコードと同じです。
時々発生するのは、検索とクリックの間に、JavaScript が checkoutLink 要素を置き換えることです。
これにより、リンクをクリックしようとすると StaleElementReferenceException 例外が発生します。 WebDriver に JavaScript の実行が完了するのを待つように指示する信頼できる方法が見つからなかったので、これが最終的に解決する方法でした。
このコードは、クリックが成功するかタイムアウトに達するまで、StaleElementReferenceException 例外を無視してリンクのクリックを試行し続けます。このソリューションが気に入っているのは、再試行ロジックを記述する手間が省かれ、WebDriver の組み込み構造のみを使用できるためです。
これは、ページ上で行われる DOM 操作によって要素が一時的にアクセス不能になった場合に発生する可能性があります。このような状況に対処するには、最終的に例外がスローされるまで、ループ内で要素へのアクセスを複数回試行します。
darrelgranger.blogspot.com のこの優れたソリューションを使用してみてください:
私もかつてこの問題に遭遇しましたが、知らないうちにページ上で BackboneJS が実行されており、私がクリックしようとしていた要素がそれによって置き換えられました。私のコードは次のとおりです。
リーリーこれは、もちろん機能的には以下のコードと同じです。
リーリー時々発生するのは、検索とクリックの間に、JavaScript が checkoutLink 要素を置き換えることです。
リーリーこれにより、リンクをクリックしようとすると StaleElementReferenceException 例外が発生します。 WebDriver に JavaScript の実行が完了するのを待つように指示する信頼できる方法が見つからなかったので、これが最終的に解決する方法でした。
リーリーこのコードは、クリックが成功するかタイムアウトに達するまで、StaleElementReferenceException 例外を無視してリンクのクリックを試行し続けます。このソリューションが気に入っているのは、再試行ロジックを記述する手間が省かれ、WebDriver の組み込み構造のみを使用できるためです。
これは、ページ上で行われる DOM 操作によって要素が一時的にアクセス不能になった場合に発生する可能性があります。このような状況に対処するには、最終的に例外がスローされるまで、ループ内で要素へのアクセスを複数回試行します。
darrelgranger.blogspot.com のこの優れたソリューションを使用してみてください:
リーリー