当前位置: 首页 > 知识库问答 >
问题:

我无法使用Selenium WebDriver逐个访问WebElements列表

黎鹤轩
2023-03-14

我想在亚马逊上搜索一个主题,然后在给定的书单上逐一给出,执行一个特定的动作。我做了以下工作:

    WebDriver driver= new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("https://www.amazon.com");
        driver.findElement(By.id("twotabsearchtextbox")).sendKeys("Operating System Books");
        driver.findElement(By.className("nav-input")).click();
        links = driver.findElements(By.className("s-access-detail-page")); //try to cache this
        for(WebElement link : links) {
              //System.out.println(String.format(link.getAttribute("href"))); //prints
              link.click();
              //extract reviews and one by one forward to semantic analysis 
              driver.navigate().back();
          }
        }

但是,这一个会转到第一个链接,然后返回到列表的页面。程序随后以以下错误终止:线程“main”org.openqa.selenium.StaleElementReferenceException:过时元素引用:元素未附加到页面文档

共有1个答案

夏侯承恩
2023-03-14

StaleElementReferenceExceptionWebElement不再附加到DOM时,当您离开网页导航,然后在导航回原始页面后尝试使用先前存储或捕获的WebElements时,通常会发生这种情况。

为了避免这种异常,您需要再次标识先前捕获的元素,在您的情况下,您的代码应该如下所示:

List <WebElement>links = driver.findElements(By.className("s-access-detail-page")); //try to cache this

        for(int i=0; i< links.size(); i++) {

             List <WebElement> refLinks = driver.findElements(By.className("s-access-detail-page"));

             refLinks.get(i).click();

             driver.navigate().back();

        }
 类似资料:
  • 使用Microsoft graph api,尤其是SharePoint beta API,我经常遇到问题。我知道它的测试版,但仍然; 因此,当我尝试使用graph explorer中的Graph API访问sharepoint列表时,问题是:GET https://Graph . Microsoft . com/beta/sites/{ site-id }/lists/{ list-id } 所以

  • 我想公开我的系统,以便通过ssh进行访问。 运行此

  • 我试图从我的SAM应用程序本地连接到DynamoDB。我能够启动Dynamodb服务器,并能够通过我的python文件连接它,引用此https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GettingStarted.Python.01.html 导入json导入boto3从boto3.dynamodb.conditions

  • 在@inheritage类型Joined中 我有班级成员、员工和学生 因此,当我保存Employee或Student记录,然后检索Person记录时,它给我的鉴别器列值为NULL,但在重新启动服务器后,它给我相应的值 如果我手动设置鉴别器列值的值,然后保存和检索,那么它会给我这个值(我需要手动设置鉴别器列值吗?)那么使用鉴别器列有什么好处呢 为什么我不应该使用一个具有列类型的employee和st

  • 我正试图调查和学习更多关于库伯内特斯的知识,我遵循了指南https://blog.hazelcast.com/deploy-monitor/在我的kubernetes集群中安装hazelcast监视器。 如果我看到kubernetes仪表板,它有2个部署、3个pod和my-service为绿色。 运行此: 但当我跑的时候 它打开浏览器,如果我访问: 我有一个404。我做错了什么?

  • 有人知道这是什么问题吗? 编辑:bucket和访问它的VM都在法兰克福。它看起来与https://docs.hortonworks.com/hdpdocuments/hdcloudaws/hdcloudaws-1.8.0/bk_hdcloud-aws/content/s3-trouble/index.html类似,但添加了endpoint之后,它仍然不起作用。