これは私の初めてのセレンでの作業であり、ウェブ技術の経験もありません。(StaleElementException:Selenium)これをどうすれば処理できますか?
私はDOM上の特定のオブジェクトにアクセスしようとしている間、私はStaleElementExceptionに直面していました。
メソッドは、すべてのタスクハンドルを以下に示します。
private void extract(WebDriver driver) {
try {
List<WebElement> rows = driver.findElements(By.xpath("//*[@id='gvSearchResults']/tbody/tr"));
for (WebElement row : rows) {
WebElement columns = row.findElement(By.xpath("./td[1]/a"));
if (assertAndVerifyElement(By.xpath("//*[@id='gvSearchResults']/tbody/tr/td[1]/a"))) {
columns.click();
}
List<WebElement> elements = driver
.findElements(By.xpath("//*[@id='ctl00_MainContent_pnlDetailsInd']/table/tbody/tr"));
for (WebElement element : elements) {
WebElement values = element.findElement(By.xpath("./td[1]"));
System.out.print(values.getText() + " ");
WebElement values2 = element.findElement(By.xpath("./td[2]"));
System.out.println(values2.getText());
}
if(assertAndVerifyElement(By.xpath("//*[@id='ctl00_MainContent_btnBack']")))
driver.findElement(By.xpath("//*[@id='ctl00_MainContent_btnBack']")).click();
}
} catch (Exception e) {
e.printStackTrace();
}
}
アサーションロジックはここに行く:
public boolean assertAndVerifyElement(By element) throws InterruptedException {
boolean isPresent = false;
for (int i = 0; i < 5; i++) {
try {
if (driver.findElement(element) != null) {
isPresent = true;
break;
}
} catch (Exception e) {
// System.out.println(e.getLocalizedMessage());
Thread.sleep(1000);
}
}
Assert.assertTrue("\"" + element + "\" is not present.", isPresent);
return isPresent;
}
私が期待した条件になるまで待機を使用するために私を求めて、いくつかの解決策を試してみましたが、それらのどれも働いていないが。
また、私が上記のサンプルで使用しているかもしれない悪い設計方法を指摘していただければ幸いです。
を試してみてください
あなたはwebelementを検索することができますか? – DebanjanB
'StaleElementException'要素が出現し、' WebDriverWait'と 'ExpectedConditions'を使ってその要素を待つ。 – sen4ik