使用selenium获取当前网址

时间:2014-04-07 08:06:12

标签: url selenium junit

您好

我想在点击链接后获取该页面的当前网址。当我点击链接(第一页)时,链接打开一个新页面(第2页),我想得到第二页的网址,但是当我调用GetCurrentUrl()时,该方法返回第一个网址页。

这是我的代码:

String att = driver.findElement(By.linkText("Lien 2")).getAttribute("href");
driver.findElement(By.linkText("Lien 2")).click(); // Open a the 2nd page
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
String act = driver.getCurrentUrl(); // Return the url of the 1rst page; but I want the 2nd
System.out.println("act "+act+" att "+att);
assertEquals(act, att);

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

而不是更改为pageloadTimeout(),请尝试手动等待Url更改(这是我在我的代码中所做的事情,所以我想我会回答)。

  • 将下面的函数定义插入到代码中。
  • 该函数在循环中打印当前URL,因此有助于调试任何问题。
  • 如果您需要更长的超时时间,请更改WebDriverWait(driver, 30))中的值“30”。

确保按以下方式调用该函数:

try {
    waitForUrl(the-url-you-want-to-wait-for);
} catch (Exception ex) {
//handle exception
}

功能:

/**
 * Wait until the current page's URL changes to whatever you specify.
 * @param Url The URL you want to wait for.
 */
protected static void waitForUrl(WebDriver driver, final String Url) throws Exception {
    try {
        (new WebDriverWait(driver, 30)).until(new ExpectedCondition<Boolean>() {
            public Boolean apply(WebDriver d) {
                                    System.out.println(d.getCurrentUrl());
                return d.getCurrentUrl().toLowerCase().endsWith(Url);
            }
        });
    }
    catch (TimeoutException e) {
        throw new Exception("Timeout Exception encountered while waiting for URL " + Url + ": \n" + e.getMessage());
    }   
}