同様の質問がすでに何百万回も聞かれていますが、この問題を解決する正しい方法はまだわかりません.
最初の質問: Selenium で Web 要素のリストを反復処理するのは悪い習慣ですか?
私は Java のリストの大ファンです。通常、関心のあるすべての WebElement を見つけて、それらを反復処理します。しかし、それを行うと、StaleElementException が発生することがよくあります。StaleElementException が何であるかは知っていますが、リストを使用しているときにそれらを防ぐ正しい方法がわかりません。
次のシナリオで皆さんはどうしますか: Web アプリケーションにたくさんのタイルがあり、クリックして結果が正しいかどうかを確認する必要があります。私はこのようなことをしたいと思っていますが、多くの場合、StaleElementException が発生します。
List<WebElement> tiles = driver.findElements(By.className("box"));
for (WebElement tile: tiles) {
//at this point I already get a stale element exception quite often.
//How can I use Lists without getting a stale element at all?
tile.click()
}
リストを引き続き使用し、古い要素を取得しない方法はありますか? 「By」を使用せずに「古い」WebElement を使用して要素を再検索できますか?
何かのようなもの:
WebElement newWebElement = driver.findElement(oldWebElement)
そうでなければ、一意の ID を持っていないため、所有している多数のタイルから 1 つの古い WebElement を見つけるために、コードでどのように記述すればよいでしょうか?