Web驱动程序:如何捕获动态更改的URL?

时间:2016-02-22 08:29:17

标签: java selenium selenium-webdriver webdriver

我需要捕获点击登录按钮后动态变化的URL值。 driver.getCurrentUrl()仅保存最新的url,这是静态的。我需要以某种方式保存几个在登录过程中动态更改的URL并将其保存到字符串或某些数组。有人能帮助我吗?

@Test
public void expireTest() {
    driver.get("https://url/default/login");
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.findElement(By.id("username")).sendKeys("name");
    driver.findElement(By.id("password")).sendKeys("pass");
    driver.findElement(By.cssSelector("input[value='someInputValue']")).click();
    getUrlValue();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.MILLISECONDS);

}

public void getUrlValue() {
    String urlValue = driver.getCurrentUrl().toString();
    if(urlValue.contains("expires_in")){
        String newValue = driver.getCurrentUrl().toString();
        System.out.print(newValue);
    }

3 个答案:

答案 0 :(得分:0)

如果网址不存在,您可以尝试将网址添加到List,直到您拥有基本网址

public void getUrlValue(List<String> urls) {
    String url;
    while (!(url = driver.getCurrentUrl()).equals(url4))
    {
        if (urls.contains(url)) {
            urls.add(url);
        }
    }
}

这应该在列表中插入四个不同的URL。

答案 1 :(得分:0)

首先,我不知道你为什么要这样做。为什么不在登录完成后等待一个元素?如果你真的想做你要求的,你可以使用显式等待。像

这样的东西
 WebDriverWait wait = new WebDriverWait(driver, 30);
 final List<String> urls = new ArrayList<String>();
 wait.until(new Function<WebDriver, Object>() {
        public Boolean apply(WebDriver driver) {
             String url = driver.getCurrentUrl();
             if(!url.contains("uniqueWordInOriginalUrl")) {
                 urls.add(url);
             }
             if(urls.size()!=4) {
                 return false;
             } else {
                 return true;
             }
         }
 });

如果你想避免这种情况并等待元素可见,你可以使用ExpectedConditions中的内部方法

driver.get("https://url/default/login");
driver.findElement(By.id("username")).sendKeys("name");
driver.findElement(By.id("password")).sendKeys("pass");
driver.findElement(By.cssSelector("input[value='someInputValue']")).click();
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("foo"))).click();

答案 2 :(得分:-1)

每隔一段时间监控网址的单独线程怎么说100毫秒!