我编写了一个函数如下
public static WebElement waitForElementToBeClickable(WebDriver driver, WebElement webElement, int seconds) {
WebDriverWait wait = new WebDriverWait(driver, seconds);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(webElement));
element.click();
return element;
}现在,我将导入这个函数并使用它,如下所示
private String loginButton = "btnActive";
private String home = "//a[@id='pt1:_UIShome']";
WebElement login = driver.findElement(By.id(loginButton));
libraryUtils.waitForElements.waitForElementToBeClickable(driver, login, 20).click();
WebElement homeButton = driver.findElement(By.xpath(home));
libraryUtils.waitForElements.waitForElementToBeClickable(driver, homeButton, 20).click();单击登录按钮,但在进入下一页后,我得到以下错误-
org.openqa.selenium.StaleElementReferenceException:陈旧元素引用:元素未附加到页面文档
Xpath是正确的,我已经检查过了。当我使用element.click()时,这也有效,但这需要我手动输入睡眠时间,这就是我要做的。我希望这是动态的。感谢任何帮助或建议。
发布于 2021-06-03 07:35:47
有时JS还没有运行完,如果您试图与web元素或web元素交互,就会看到staleElemenent exception。
但是,下面的解决方案可能对您有用:
new WebDriverWait(driver, 10).ignoring(StaleElementReferenceException.class).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@id='pt1:_UIShome']")));
driver.findElement(By.xpath("//a[@id='pt1:_UIShome']")).click();发布于 2021-06-03 11:42:59
这可能不是一个好办法,但我认为没有其他稳定的解决方案,增加一些睡眠。所以,请试试这个:
private String loginButton = "btnActive";
private String home = "//a[@id='pt1:_UIShome']";
WebElement login = driver.findElement(By.id(loginButton));
libraryUtils.waitForElements.waitForElementToBeClickable(driver, login, 20).click();
driver.findElement(By.xpath(home));
libraryUtils.waitForElements.waitForElementToBeClickable(driver, homeButton, 20);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
driver.findElement(By.xpath(home)).click();发布于 2021-06-03 16:13:24
这里的问题是,您已经在waitForElementToBeClickable函数中执行waitForElementToBeClickable操作,并在调用此函数时再次调用click。
libraryUtils.waitForElements.waitForElementToBeClickable(driver, login, 20).click();
因为您已经在等待元素可点击时单击了它,所以不应该再次单击它。我希望你能找到StaleElementException的答案
https://stackoverflow.com/questions/67817069
复制相似问题