Метод getCurrentUrl ();возвращает неверный URL - PullRequest
0 голосов
/ 22 мая 2018

На самом деле я только начинаю изучать Java с Selenium и не могу получить текущий URL.Selenium возвращает начальный URL, а не текущий.

Похоже, implicitlywait() не работает или я что-то не так сделал?

package SeleniumPackage;

import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
import java.util.concurrent.TimeUnit;

public class SeleniumClass {

public static void main(String[] args) {

WebDriver driver = new ChromeDriver();

driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

driver.get("https://learn.letskodeit.com/p/practice");

WebElement benzRadioBtn = driver.findElement(By.id("benzradio"));
benzRadioBtn.click();

WebElement hondaRadioBtn = driver.findElement(By.id("hondaradio"));
hondaRadioBtn.click();
WebElement bmwRadioBtn = driver.findElement(By.id("bmwradio"));
bmwRadioBtn.click();
WebElement benzCheckBox = driver.findElement(By.id("benzcheck"));
benzCheckBox.click();
Select dropdown = new Select (driver.findElement(By.id("carselect")));
dropdown.selectByValue("honda");
WebElement element = driver.findElement(By.id("product"));
System.out.println(element.getText());

driver.findElement(By.linkText("Terms of Use")).click();

String currentURL = driver.getCurrentUrl();  
System.out.println(currentURL);

Ответы [ 4 ]

0 голосов
/ 22 мая 2018

Как вы уже вызывали click() в предыдущей строке, затем для получения URL вам нужно вызвать WebDriverWait в сочетании с ExpectedConditions method urlContains(java.lang.String fraction) следующим образом:

new WebDriverWait(driver, 20).until(ExpectedConditions.urlContains("partial_text_of_url"));
System.out.println(driver.getCurrentUrl());

Примечание : необходимо удалить implicitlywait(), поскольку согласно документации :

Не смешивать неявные и явные ожидания.Это может привести к непредсказуемому времени ожидания.Например, установка неявного ожидания 10 секунд и явного ожидания 15 секунд может привести к возникновению тайм-аута через 20 секунд.

0 голосов
/ 22 мая 2018

Это ожидаемое поведение, так как вы нажимаете «Условия использования» в iframe, который не перенаправляет ваш URL (просто измените его)

enter image description here

Я предлагаю использовать xpath для поиска нужного элемента следующим образом:

WebElement element = driver.findElement(By.xpath("/html[@class=' video no-videoautoplay']/body/div[@class='view-school']/footer[@class='bottom-menu bottom-menu-inverse']/div[@class='container']/div[@class='row']/div[@class='col-xs-12 col-sm-4 col-md-4 footer-column'][2]/ul[@class='list-unstyled']/li[1]/a"));
0 голосов
/ 22 мая 2018

Вы можете сопоставить заголовок, если заголовок совпадает, а затем распечатать текущий URL, он всегда дает вам правильный URL

public static void main(String[] args) throws InterruptedException {
System.out.println("Ready to launch the browser");
System.setProperty("webdriver.chrome.driver", "C:/Users/sankalp.gupta/Desktop/JAVASELN/chromedriver.exe");

WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.get("https://learn.letskodeit.com/p/practice");

WebElement benzRadioBtn = driver.findElement(By.id("benzradio"));
benzRadioBtn.click();

WebElement hondaRadioBtn = driver.findElement(By.id("hondaradio"));
hondaRadioBtn.click();
WebElement bmwRadioBtn = driver.findElement(By.id("bmwradio"));
bmwRadioBtn.click();
WebElement benzCheckBox = driver.findElement(By.id("benzcheck"));
benzCheckBox.click();
Select dropdown = new Select (driver.findElement(By.id("carselect")));
dropdown.selectByValue("honda");
WebElement element = driver.findElement(By.id("product"));
System.out.println(element.getText());

driver.findElement(By.linkText("Terms of Use")).click();
if(driver.getTitle().contains("Practice | Let's Kode It"))
    {
        System.out.println(driver.getCurrentUrl());

    }
}
0 голосов
/ 22 мая 2018

Вы должны добавить явное ожидание после нажатия на ссылку «Условия использования», иначе добавьте некоторую задержку.

Модифицированный код:

driver.findElement(By.linkText("Terms of Use")).click();
//Added Newly
WebDriverWait wait = new WebDriverWait(driver, 15);
wait.until(ExpectedConditions.titleContains("Terms"));

String currentURL = driver.getCurrentUrl();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...