Java selenium过时元素
我有以下内容:Java selenium过时元素,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我有以下内容: <div _ngcontent-yvb-1="" ng-reflect-class-name="d3-data-table-cell code" class="d3-data-table-cell code" ng-reflect-id="entity_data_manager_table_cell_code" id="entity_data_manager_table_cell_code"> UP </div> 向上的 我使用Java在
<div _ngcontent-yvb-1="" ng-reflect-class-name="d3-data-table-cell code" class="d3-data-table-cell code" ng-reflect-id="entity_data_manager_table_cell_code" id="entity_data_manager_table_cell_code">
UP
</div>
向上的
我使用Java在Selenium中做了一个测试,其中我使用id=“entity\u data\u manager\u table\u cell\u code”
识别了元素。该测试过去每5次通过一次,但有时会失败,并显示消息stale element
。现在,测试始终失败,并显示以下消息:
stale元素引用:元素未附加到页面文档
为什么会这样?开发商说他没有改变任何东西。解决方案是什么?原因可能是直到您访问元素时,您的元素才被完全加载。 尝试对该特定元素使用显式等待。 还要咨询开发人员,为该元素提供一个唯一的引用,以防它动态变化 如果页面上发生的DOM操作暂时导致元素不可访问,则会发生过时的元素引用。考虑到这些情况,您可以尝试在循环中多次访问该元素,然后最终引发异常 并尝试按类名查找元素
driver.findElement(By.className("date-header"));
原因可能是直到您访问元素时才完全加载它。 尝试对该特定元素使用显式等待。 还要咨询开发人员,为该元素提供一个唯一的引用,以防它动态变化 如果页面上发生的DOM操作暂时导致元素不可访问,则会发生过时的元素引用。考虑到这些情况,您可以尝试在循环中多次访问该元素,然后最终引发异常 并尝试按类名查找元素
driver.findElement(By.className("date-header"));
您可以按如下方式处理异常
public boolean retryingFindClick(By by) {
boolean result = false;
int attempts = 0;
while(attempts < 2) {
try {
driver.findElement(by).click();
result = true;
break;
} catch(StaleElementException e) {
}
attempts++;
}
return result;
}
public boolean retryingFindClick(By){
布尔结果=假;
int=0;
而(尝试次数<2次){
试一试{
driver.findElement(by).click();
结果=真;
打破
}捕获(StaleElementException e){
}
尝试++;
}
返回结果;
}
有关更多信息,请参见此您可以按如下方式处理异常
public boolean retryingFindClick(By by) {
boolean result = false;
int attempts = 0;
while(attempts < 2) {
try {
driver.findElement(by).click();
result = true;
break;
} catch(StaleElementException e) {
}
attempts++;
}
return result;
}
public boolean retryingFindClick(By){
布尔结果=假;
int=0;
而(尝试次数<2次){
试一试{
driver.findElement(by).click();
结果=真;
打破
}捕获(StaleElementException e){
}
尝试++;
}
返回结果;
}
更多信息请参见此我使用此“WebElement”而不是普通的“WebElement”修复了它
这个主意是别人给我的,我已经不记得了
public class RefreshableWebElement2 implements WebElement {
private final WebDriver driver;
private final By by;
public RefreshableWebElement2(WebDriver driver, By by) {
this.driver = driver;
this.by = by;
}
private WebElement getElement() {
return driver.findElement(by);
}
@Override
public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
return getElement().getScreenshotAs(target);
}
@Override
public void click() {
getElement().click();
}
公共类RefreshableWebElement2实现WebElement{
私有最终WebDriver;
私人终审法院;
公共刷新WebElement2(WebDriver驱动程序,按){
this.driver=driver;
这个;
}
私有WebElement getElement(){
返回驱动程序findElement(通过);
}
@凌驾
public X getScreenshotAs(OutputType目标)引发WebDriverException{
返回getElement().getScreenshotAs(目标);
}
@凌驾
公共作废点击(){
getElement()。单击();
}
//。。。
}我用这个“WebElement”而不是普通的“WebElement”修复了它
这个主意是别人给我的,我已经不记得了
public class RefreshableWebElement2 implements WebElement {
private final WebDriver driver;
private final By by;
public RefreshableWebElement2(WebDriver driver, By by) {
this.driver = driver;
this.by = by;
}
private WebElement getElement() {
return driver.findElement(by);
}
@Override
public <X> X getScreenshotAs(OutputType<X> target) throws WebDriverException {
return getElement().getScreenshotAs(target);
}
@Override
public void click() {
getElement().click();
}
公共类RefreshableWebElement2实现WebElement{
私有最终WebDriver;
私人终审法院;
公共刷新WebElement2(WebDriver驱动程序,按){
this.driver=driver;
这个;
}
私有WebElement getElement(){
返回驱动程序findElement(通过);
}
@凌驾
public X getScreenshotAs(OutputType目标)引发WebDriverException{
返回getElement().getScreenshotAs(目标);
}
@凌驾
公共作废点击(){
getElement()。单击();
}
//。。。
}在与元素交互之前添加一些等待,这是任何帧中的元素吗?我在互联网上做了一些研究,并在多个浏览器上运行了测试。问题似乎与使用含硒食品有关。当同一个测试在另一个浏览器上运行时,例如Chrome,没有问题。在与元素交互之前添加一些等待。在任何框架内的元素是什么?我在互联网上做了一些研究,并在多个浏览器上运行了我的测试。问题似乎与使用含硒食品有关。当相同的测试在另一个浏览器(例如Chrome)上运行时,没有问题。