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

Java和selenium webdriver一起使用上一页和元素

怀齐智
2023-03-14

我有一个应用程序,它需要硒导航到下一页,并验证如果需要的信息找到,它没有找到比回到同一页,比点击下一个用户信息,并验证所需的信息找到,这继续,直到我们有用户链接。

我的过程:我已经创建了所有用户链接的列表来运行Enhanced for循环。现在,当用户点击第一个用户链接时,如果找不到selenium的信息会返回到同一页面,当用户尝试点击第二个用户时,它会给出异常“org”。openqa。硒。StaleElementReferenceException:stale元素引用:元素未附加到页面文档'。我尝试使用back()方法,但不起作用。有什么办法吗?

谢谢,卡里姆

共有3个答案

郭俊人
2023-03-14

我找到了解决这个问题的方法,因为链接是动态生成的,所以我无法获得href值。然而,我获取onclick属性中给出的userid并将其存储在列表中,然后为这些用户创建url并在当前浏览器中打开。回来的时候,我只需点击导航到同一页面的链接。

祁曦哲
2023-03-14

另一个使用您可能有的页面对象的解决方案:

int numberOfLinks = page.getUserLink().size();
NextPage nextPage;
for (int i = 0; i < numberOfLinks - 1; i++) {
  page.getUserLink().get(i).click();
  nextPage = new NextPage();
  if (nextPage.isInformationFound()) {
    break;
  }
  driver.navigate().back();
  page = new Page();
}

做出相应的调整,并尝试一下;)

当做

邵羽
2023-03-14

出现StaleElementReferenceException是因为在尝试导航回时DOM元素已被销毁并重新创建。

因此,我建议您从原始页面获取用户链接的所有href属性,并导航到它们中的每一个,而不是单击试图逐个单击链接,这将始终引发StaleElementReferenceException。

下面是获取页面中所有链接列表的方法(当然,您可以缩小所需元素的范围;这只是一个示例):

    //Getting the list of all links in the page
    List<WebElement> list = driver.findElements(By.tagName("a"));

    //Getting the "href" attribute of each elements and putting them into another list
    List<String> href_links = null;
    for(WebElement link:list){
        href_links.add(link.getAttribute("href"));
    }

    //Navigating through each links
    for(int i=0;i<href_links.size();i++){

        driver.get(href_links.get(i));
    }
 类似资料:
  • 问题内容: 民间, 之前,我只有一个jar文件,并且设置了清单,以便可以简单地以以下方式运行程序: 现在,我将功能分为两个jar文件-MyCore.jar和MyApp.jar。 以下命令有效: 但是我不能让以下工作 我收到ClassNotFoundException。 我更喜欢使用“ -jar”开关。有办法使它起作用吗? 预先感谢您的帮助。 问候, 彼得 问题答案: 我有一个这样的Manifest

  • 我正在尝试播放以下网站的视频(使用JUnit)-Day01。http://www.itelearn.com/live-training/security-testing-live-training我试图实现的是,在播放视频后,我将拍摄一张屏幕截图,以证明视频播放正确。点击Day01视频后,它会在一个新窗口中打开——当我查看代码时,我意识到他们使用了iFrame。我可以关闭此视频窗口,但无法播放/暂

  • 问题内容: 我是Flask的忠实拥护者 -部分是因为它简单,部分是因为它具有很多扩展。但是,Flask是要在WSGI环境中使用的,并且WSGI不是非阻塞的,因此(我相信)对于某些类型的应用程序,它的伸缩性不如Tornado。 由于每个人都有一个将调用函数的URL调度程序,并且两个都将使用Python文件(在Django中,你不启动python文件,但在flask或Tornado中,你可以这样做)这

  • 问题内容: 考虑以下查询: 此查询返回以下结果(Usnig Northwind数据库): 我想将Pivot与Join结合使用来获得以下结果: 我该怎么做? 谢谢 问题答案:

  • 我们现在知道有两种"FreeMarker Ant tasks": FreemarkerXmlTask:它来自于FreeMarker的发布包, 打包到 freemarker.jar 中。 这是使用FreeMarker模板转换XML文档的轻量级的,易于使用的Ant任务。 它的入口源文件(输入文件)是XML文件,和生成的输出文件对应, 这是通过单独模板实现的。也就是说,对于每个XML文件, 模板会被执行

  • 我试图在Intellij13中使用一个Gradle项目,但我经常遇到这样的问题: null null 下面是我在运行“Gradle clean build”时得到的一个构建错误: 如果我把所有东西都变成Java,那么我就不会得到任何编译或执行错误。