こんにちは私はすでにChrome
とFirefox
ドライバの両方を試してみました、私はJava library
を使用していますSelenium
セレンStaleElementReferenceException
に新しいです。
私はループを実行しています。興味深いのは、ループが時々3回、2回実行され、同じ繰り返しで必ず失敗するとは限りません。私はそれが何らかの競合条件(ページを読み込むのを待つようなもの)と関係していると仮定します。私がデバッグモードで実行すると、完全に動作するようです。
私は既にwait explicitly
とimplicitly
のような他の回答からの提案を試みましたが、依然として助けにはなりませんでした。たぶんコードを見れば、私に手を差し伸べることができます。
これはループ内に入ります。
WebDriverWait wait = new WebDriverWait(driver,20);
WebElement searchResults = driver.findElement(new By.ById("searchresults"));
searchResults = searchResults.findElement(new By.ByClassName("table"));
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.tagName("a")));
List<WebElement> list=searchResults.findElements(By.tagName("a"));
for(WebElement w: list) {
result.add(w.getAttribute("href")); //EXCEPTION HAPPENS ALWAYS HERE
}
SOLUTION
溶液は、全ハックです。私はまだ理解していませんが、それは仕事です。誰かがなぜ理解したら、私に知らせてください。
私はすべてのウェイトを上げて、より良いパフォーマンスを出します。私はまた、@Cyrilの提案を取って、いくつかのデータチェックに沿って例外がスローされたら、私が望むすべてを得たことを確認するために反復を再実行しました。
WebDriverWait wait = new WebDriverWait(driver,20);
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(new By.ById("searchresults")));
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(new By.ByClassName("table")));
wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.tagName("a")));
お返事ありがとうございました。私は最後の提案をしました。私は何らかの形で他の変更を加えて何とかそれをハックします(上記参照)。私は100%満足しているわけではありませんが、それは仕事です。 – Altober