List 比较列表';由WebDriver下载的s元素
我需要比较一些子页面上显示的表中的元素(仅第一列中的值) 使用列表,我创建了一个大列表(有95个元素)。不幸的是,当我开始比较它们时,测试结束时出现错误消息“org.openqa.selenium.StaleElementReferenceException:stale element reference:element未附加到页面文档” 当我的元素少于10个(一页上只有一个表)时,一切都正常工作 有人知道我应该在代码中更改什么吗List 比较列表';由WebDriver下载的s元素,list,selenium-webdriver,groovy,List,Selenium Webdriver,Groovy,我需要比较一些子页面上显示的表中的元素(仅第一列中的值) 使用列表,我创建了一个大列表(有95个元素)。不幸的是,当我开始比较它们时,测试结束时出现错误消息“org.openqa.selenium.StaleElementReferenceException:stale element reference:element未附加到页面文档” 当我的元素少于10个(一页上只有一个表)时,一切都正常工作 有人知道我应该在代码中更改什么吗 List<WebElement> pagesList
List<WebElement> pagesList = webDriver.findElements(By.cssSelector("#div_table > ul > li"));
if (pagesList.size() > 0) {
boolean nextPagePresent = true;
List<String> documentsList = webDriver.findElements(By.cssSelector("#table > tbody > tr > td:nth-child(1)"));
while (nextPagePresent == true) {
try {
nextPagePresent = webDriver.findElements(By.cssSelector("#div_table > ul > li.nextLink")).size() > 0;
documentsList += webDriver.findElements(By.cssSelector("#table > tbody > tr > td:nth-child(1)"));
if(nextPagePresent == true) {
webDriver.findElement(By.cssSelector("#div_table > ul > li.nextLink")).click();
}
} catch (org.openqa.selenium.NoSuchElementException ex) {
throw new Exception('Page not found');
}
}
documentsList.removeRange(0, 10);
for (int i = 0; i < documentsList.size(); i++) {
for (int k = i + 1; k < documentsList.size(); k++) {
if (documentsList.get(i).getText().equals(documentsList.get(k).getText())) {
log.info(documentsList.get(i).getText())
assert false;
}
}
}
} else {
List<String> documentsList = webDriver.findElements(By.cssSelector("#table > tbody > tr > td:nth-child(1)"));
for (int i = 0; i < documentsList.size(); i++) {
for (int k = i + 1; k < documentsList.size(); k++) {
if (documentsList.get(i).getText().equals(documentsList.get(k).getText())) {
assert false;
}
}
}
}
List pagesList=webDriver.findElements(By.cssSelector(“#div_table>ul>li”);
如果(pagesList.size()>0){
布尔值nextPagePresent=true;
列表文档列表=webDriver.findElements(By.cssSelector(“#table>tbody>tr>td:nth child(1)”);
while(nextPagePresent==true){
试一试{
nextPagePresent=webDriver.findElements(By.cssSelector(“#div_table>ul>li.nextLink”)).size()>0;
documentsList+=webDriver.findElements(By.cssSelector(“#table>tbody>tr>td:n个子项(1)”);
如果(nextPagePresent==true){
webDriver.findElement(By.cssSelector(“#div_table>ul>li.nextLink”)。单击();
}
}catch(org.openqa.selenium.NoSuchElementException ex){
抛出新异常(“未找到页面”);
}
}
文档列表删除范围(0,10);
对于(int i=0;itbody>tr>td:nth child(1)”);
对于(int i=0;i
您看到的异常是预期的,因为您的元素位于多个页面上,并且您实际上正在它们之间切换
基本上,您得到的异常表明它无法从WebElement检索文本,这在逻辑上是正确的,因为元素不再附加到DOM模型。
您可以做的是从页面上当前可见的元素中提取文本,并将其放入单独的列表中,
一旦您从所有页面的所有元素中提取文本,您就可以对其进行比较。
因此,行动顺序应如下所示: