List 比较列表';由WebDriver下载的s元素

List 比较列表';由WebDriver下载的s元素,list,selenium-webdriver,groovy,List,Selenium Webdriver,Groovy,我需要比较一些子页面上显示的表中的元素(仅第一列中的值) 使用列表,我创建了一个大列表(有95个元素)。不幸的是,当我开始比较它们时,测试结束时出现错误消息“org.openqa.selenium.StaleElementReferenceException:stale element reference:element未附加到页面文档” 当我的元素少于10个(一页上只有一个表)时,一切都正常工作 有人知道我应该在代码中更改什么吗 List<WebElement> pagesList

我需要比较一些子页面上显示的表中的元素(仅第一列中的值)

使用列表,我创建了一个大列表(有95个元素)。不幸的是,当我开始比较它们时,测试结束时出现错误消息“org.openqa.selenium.StaleElementReferenceException:stale element reference:element未附加到页面文档”

当我的元素少于10个(一页上只有一个表)时,一切都正常工作

有人知道我应该在代码中更改什么吗

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模型。 您可以做的是从页面上当前可见的元素中提取文本,并将其放入单独的
列表中,
一旦您从所有页面的所有元素中提取文本,您就可以对其进行比较。 因此,行动顺序应如下所示:

  • 加载页
  • 从所有可见元素中提取文本并将其放入单独的列表中
  • 换页
  • 重复步骤2,3,直到没有剩余页面
  • 比较结果
  • 有关异常的更多详细信息,请参见:

    应避免使用内置的断言,考虑使用Java/TestNG等测试java测试库,或者断言特定的库,如Asjt4J,它会给您更多的灵活性。p>