Java 如何确保页面上的所有字段都以selenium格式加载,以确保没有任何字段过时? 问题

Java 如何确保页面上的所有字段都以selenium格式加载,以确保没有任何字段过时? 问题,java,html,selenium,selenium-webdriver,peoplesoft,Java,Html,Selenium,Selenium Webdriver,Peoplesoft,我有一个PeopleSoft页面,我正试图用SeleniumWebDriverforJava测试它。但是,我一直遇到这个错误: org.openqa.selenium.StaleElementReferenceException:stale元素引用:元素未附加到页面文档 我读过、和以及其他堆栈溢出问题,但没有一个答案对我有用 页面布局 我正在测试的PeopleSoft页面是一个I9表单,我关心的部分如下所示: 对应的HTML是非常大的和凌乱的——正如所有PosioSoT页面一样,它在中间,一个

我有一个PeopleSoft页面,我正试图用SeleniumWebDriverforJava测试它。但是,我一直遇到这个错误:

org.openqa.selenium.StaleElementReferenceException:stale元素引用:元素未附加到页面文档

我读过、和以及其他堆栈溢出问题,但没有一个答案对我有用

页面布局 我正在测试的PeopleSoft页面是一个I9表单,我关心的部分如下所示:

对应的HTML是非常大的和凌乱的——正如所有PosioSoT页面一样,它在中间,一个<代码> iFrAME几乎覆盖了整个页面。

作为参考,这里有
iframe
中的所有HTML

以下是与上图中各部分相对应的部分:


*姓(姓)
*名(名)
中间字首
使用的其他姓氏(如有)
*地址(街道编号和名称)
公寓号码
*城市或城镇
*陈述
*邮政编码
*出生日期(年月日)
*美国社会保险号码
员工';电子邮件地址
员工';s的电话号码
社会保障
888881125

有时调用
clear()
会更改元素引用,当页面更新时,您试图再次定位此元素并查找旧引用,这会在
sendKeys()
时导致
StaleElementReferenceException
异常

如果您已经知道遇到问题的字段,可以尝试以下操作:

WebDriverWait wait = new WebDriverWait (driver, 30);
WebElement element = driver.findElement(By.id("G_FORM_I9_G_LAST_NAME"));
element.clear();
wait.until(ExpectedConditions.stalenessOf(element));
driver.findElement(By.id("G_FORM_I9_G_LAST_NAME")).sendKeys(data.lastName, Keys.TAB);

但是,如果您不知道是哪些字段导致了问题,并且元素没有过时,您将得到一个
TimeoutException

,看起来这确实是问题所在。非常有趣。