selenium получить текущий url после загрузки страницы
Я использую Selenium Webdriver в Java. Я хочу получить текущий url-адрес после нажатия кнопки "Далее", чтобы перейти со страницы 1 на страницу 2. Вот код, который у меня есть:
WebDriver driver = new FirefoxDriver();
String startURL = //a starting url;
String currentURL = null;
WebDriverWait wait = new WebDriverWait(driver, 10);
foo(driver,startURL);
/* go to next page */
if(driver.findElement(By.xpath("//*[@id='someID']")).isDisplayed()){
driver.findElement(By.xpath("//*[@id='someID']")).click();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id='someID']")));
currentURL = driver.getCurrentUrl();
System.out.println(currentURL);
}
У меня есть как неявные, так и явные вызовы ожидания, чтобы дождаться полной загрузки страницы, прежде чем я получу текущий url. Тем не менее, это все-таки распечатать адрес Страница 1 (это URL-адрес страницы 2).
3 ответов
Как вы сказали, так как xpath для следующей кнопки одинакова на каждой странице, она не будет работать. Он работает как закодированный в том, что он ждет отображения элемента, но поскольку он уже отображается, неявное ожидание не применяется, потому что ему не нужно ждать вообще. Почему бы вам не использовать тот факт, что url-адрес изменяется, так как из вашего кода он изменяется при нажатии следующей кнопки. Я делаю C#, но я думаю, что в Java это будет что-то вроде:
WebDriver driver = new FirefoxDriver();
String startURL = //a starting url;
String currentURL = null;
WebDriverWait wait = new WebDriverWait(driver, 10);
foo(driver,startURL);
/* go to next page */
if(driver.findElement(By.xpath("//*[@id='someID']")).isDisplayed()){
String previousURL = driver.getCurrentUrl();
driver.findElement(By.xpath("//*[@id='someID']")).click();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
ExpectedCondition e = new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver d) {
return (d.getCurrentUrl() != previousURL);
}
};
wait.until(e);
currentURL = driver.getCurrentUrl();
System.out.println(currentURL);
}
Страница 2 в новой вкладке/окне ? Если это так, используйте код ниже:
try {
String winHandleBefore = driver.getWindowHandle();
for(String winHandle : driver.getWindowHandles()){
driver.switchTo().window(winHandle);
String act = driver.getCurrentUrl();
}
}catch(Exception e){
System.out.println("fail");
}
прошло немного времени с тех пор, как я закодировал селен, но ваш код выглядит нормально для меня. Следует отметить, что если элемент не найден, но время ожидания прошло, я думаю, что код будет продолжать выполняться. Так что вы можете сделать что-то вроде этого:
boolean exists = driver.findElements(By.xpath("//*[@id='someID']")).size() != 0
что возвращает приведенное выше логическое значение? И вы уверены, что selenium действительно переходит на ожидаемую страницу? (Это может показаться глупым вопросом, но вы действительно смотрите, как меняются страницы... селен можно запустить отдаленно вы знаете...)