Java 单击SeleniumWebDriver中的Web链接

Java 单击SeleniumWebDriver中的Web链接,java,selenium,Java,Selenium,我的问题很简单-使用Selenium,当每个超链接在新页面或新窗口中打开或在同一网页中打开时,如何保持单击链接 例如,我在网页上有以下链接: 登录 注册 忘记密码了? 与我们签约 点击这个链接 家 条款 隐私政策 以下是我为点击网页上提到的链接而编写的代码片段: List<WebElement> elements = driver.findElements(By.tagName("a")); //clicking all links for (WebE

我的问题很简单-使用Selenium,当每个超链接在新页面或新窗口中打开或在同一网页中打开时,如何保持单击链接

例如,我在网页上有以下链接: 登录 注册 忘记密码了? 与我们签约 点击这个链接 家 条款 隐私政策

以下是我为点击网页上提到的链接而编写的代码片段:

List<WebElement> elements = driver.findElements(By.tagName("a"));
        //clicking all links
        for (WebElement el : elements){
            System.out.println("Link getting clicked"  + el.getText());
            el.click();
            driver.navigate().back();
        }
List elements=driver.findElements(按.tagName(“a”));
//单击所有链接
for(WebElement el:elements){
System.out.println(“点击链接”+el.getText());
el.click();
driver.navigate().back();
}
正如你所看到的,我正试图获得链接,并试图一个接一个地点击它们。但是,在第一次单击之后,我得到了一个错误。控制台显示:“org.openqa.selenium.StaleElementReferenceException:元素不再附加到DOM”

我确信我知道原因,因为链接被打开在同一个网页上,但我正在做一个反向导航,这对我没有任何帮助


有什么想法/建议吗?

这可能是由于在加载页面之前,程序执行前进到调用“driver.navigate().back();”

尝试引入一个,它告诉“WebDriver在试图查找一个或多个元素时,如果它们不立即可用,则在一定时间内轮询DOM”

e、 g.创建web驱动程序时,请尝试:

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

无论何时重新加载页面,您都必须重新填充元素,然后才能与其交互。对于您的代码,请尝试将其修改为:

    driver.manage().timeouts().implicitlyWait(3000, TimeUnit.MILLISECONDS);
    List<WebElement> elements = driver.findElements(By.tagName("a"));
    //clicking all links
    for (int i=0; i<elements.size(); i++){
        WebElement el = driver.findElements(By.tagName("a")).get(i);            
        System.out.println("Link getting clicked"  + el.getText());
        el.click();
        driver.navigate().back();
    }
driver.manage().timeouts().implicitlyWait(3000,TimeUnit.ms);
列表元素=driver.findElements(按.tagName(“a”));
//单击所有链接

对于(int i=0;iI实际上在驱动程序导航前后将Thread.sleep放置了5000多次,但仍然是一样的。原因是:org.openqa.selenium.remote.ErrorHandler$UnknownServerException:元素不再附加到DOM@Edin_CA你能在你的问题中也包括目标HTML吗?好的。我会再编辑一点:Login link正好是第一个链接,因为它在同一个网页中打开。但是,注册失败,因为它打开了一个新的url。这就是为什么我没有使用navigate.back的原因。有没有一种方法可以让我继续执行我的测试,即使页面打开时使用了一个新的url?无论你是否使用
.navigate().back()
。初始单击之后,页面正在更改,因此您必须再次重新填充所有
a
元素。