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

Java Web驱动程序:如何捕获动态更改的URL?,java,selenium,selenium-webdriver,webdriver,Java,Selenium,Selenium Webdriver,Webdriver,我需要捕获URL值,该值在单击“登录”按钮后动态变化。getCurrentUrl()仅保存最新的静态url。我需要以某种方式保存在登录过程中动态变化的几个URL,并将其保存到字符串或某个数组中。有人能帮我吗 @Test public void expireTest() { driver.get("https://url/default/login"); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

我需要捕获URL值,该值在单击“登录”按钮后动态变化。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);
    }

您可以尝试将url添加到
列表
,如果它们在获得基本url之前不存在

public void getUrlValue(List<String> urls) {
    String url;
    while (!(url = driver.getCurrentUrl()).equals(url4))
    {
        if (urls.contains(url)) {
            urls.add(url);
        }
    }
}
public void getUrlValue(列出URL){
字符串url;
而(!(url=driver.getCurrentUrl()).equals(url4))
{
if(url.contains(url)){
添加(url);
}
}
}

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

每隔100毫秒用一个单独的线程来监控URL怎么样

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

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

不,它不起作用了。getCurrentUrl()无法保存动态变化的值的问题;也许webDriver有其他方法来获取值?@DimencionRider你是什么意思?它返回旧的url?工作原理:我需要保存4个url的值:(url1、url2、url3、url4(静态值));单击“登录”按钮后,应用程序启动动态加载,该加载有三个链接(url1、url2、url3),约半秒可见。只有在这个过程之后,我们才能看到主页和由getCurrentUrl()方法保存的静态链接(url4)。我们如何将登录过程中动态变化的所有url保存到数组中?不知道在Java中,我是一名C#程序员。Java中有类似于
BackgroundWorker
的类吗?这不是一个答案,它只是一个注释。如果我理解得很清楚,你想捕获网络流量,有一种方法是使用browsermobproxy,它可以捕获日志并将其保存为易于阅读的json格式,如果你想,我可以使用Java发布一个示例(在c#中也可以这样做)。这里可能的答案是:谢谢,我将尝试您的解决方法。但是,问题是,getCurrentUrl();仅获取静态url。我们无法捕获一直在更改的动态url。请尝试此操作。预期条件的全部目的是继续轮询某些内容,希望此操作能够正常工作。您这样做的任何特定原因?我正在尝试捕获auth_令牌值
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();