单击Selenium Webdriver中的Web链接

时间:2013-10-04 23:12:57

标签: java selenium

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

我很确定我知道原因,因为链接在同一个网页上被打开,但我正在进行后退导航,这根本没有帮助我。

有任何想法/建议吗?

2 个答案:

答案 0 :(得分:0)

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

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

e.g。创建Web驱动程序时,请尝试:

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

答案 1 :(得分: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();
    }