【问题标题】:Clicking Web Links in Selenium Webdriver在 Selenium Webdriver 中单击 Web 链接
【发布时间】:2013-10-04 23:12:56
【问题描述】:

我的问题很简单-使用 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”。

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

有什么想法/建议吗?

【问题讨论】:

  • 使用.navigate().back() 导航回一个页面并不重要。初始点击后页面发生变化,因此您必须再次重新查找所有 a 元素。

标签: java selenium


【解决方案1】:

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

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

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

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

【讨论】:

  • 其实我在驱动导航前后都放了5000多的Thread.sleep,但还是一样的东西。原因:org.openqa.selenium.remote.ErrorHandler$UnknownServerException:元素不再附加到 DOM
  • @Edin_CA 您能否也将目标 HTML 包含在您的问题中?
  • 好的。我将再编辑一点:登录链接,恰好是第一个链接,因为它在同一个网页中打开。但是,注册失败,因为它打开了一个新的 url。这就是为什么我要避免使用 navigation.back 的原因。有没有一种方法可以让我在使用新网址打开页面时继续执行测试?
【解决方案2】:

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

    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();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2014-11-06
    • 1970-01-01
    相关资源
    最近更新 更多