0

我的问题很简单-使用 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();
        }

如您所见,我正在尝试获取链接并尝试一一点击它们。但是,我在第一次单击后出现错误。控制台说:“org.openqa.selenium.StaleElementReferenceException:元素不再附加到 DOM”。

我很确定我知道原因,因为链接在同一个网页上打开,但我正在做一个后退导航,这对我一点帮助都没有。

有什么想法/建议吗?

4

2 回答 2

0

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

尝试引入一个隐式等待,它告诉“WebDriver 在尝试查找一个或多个元素(如果它们不是立即可用)时轮询 DOM 一段时间”

例如,当您创建 Web 驱动程序时,请尝试:

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);
于 2013-10-04T23:49:29.113 回答
0

每次重新加载页面时,您都必须重新查找元素,然后才能与之交互,对于您的代码,请尝试将它们修改为:

    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();
    }
于 2015-04-30T14:45:41.247 回答