我需要捕获点击登录按钮后动态变化的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);
}
答案 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毫秒!