Получить URL для открытой вкладки Selenium / Java - PullRequest
0 голосов
/ 30 мая 2018

Что я тестирую: Зайдите на веб-страницу, нажмите на ссылку, которая открывается в новой вкладке.Подтвердите URL для новой вкладки.

Я делаю это в Cucumber / Selenium / Java.

Это мой огурчик

Scenario Outline: The HomePage tourism box links to the correct page

Given I navigate to the HomePage in <language>
When I click on the visit Tourism PEI Button
Then I am taken to the Tourism PEI landing page URL in a new tab

Examples:
  | language |
  | English  |
  | French   |

Код, который я имею для нажатияссылка:

 @When("^I click on the Visit\\s" + pageElements + "$")
public void iClickFOnTheVisitTourismPEIButton(String element)  {
    pageModel.pageObject(element).click();
    progressObj.wait(1);
}

И код, который я пытался получить URL из новой вкладки.Я борюсь здесь.Все, что я пробую, открывает новую вкладку, затем экран гаснет и говорит данные;в URL или он откроет новую вкладку поверх той, которая уже делает.Я знаю, что я не на правильном пути здесь.Это всего лишь последнее, что я попробовал.

@Then("^I am\\s*((?:not)?)\\staken to the Tourism PEI landing page URL in a new tab$")
public void iAmTakenToTheTourismPEILandingPageURLInANewTab() {

    WebDriver driver = new ChromeDriver();
    Actions action = new Actions(driver);
    action.keyDown(Keys.CONTROL).keyDown(Keys.SHIFT).sendKeys(Keys.TAB).build().perform();
}

Я тоже попробовал это

 String currentURL;

       currentURL = driver.getWebDriver().getCurrentUrl();
       if (currentURL.equalsIgnoreCase("https://www.tourismpei.com/")) {
           System.out.println("Matches" + currentURL);
       } else {
           System.out.println("Does not match" + currentURL);
       }

Он принимает оригинальный URL, а не новую вкладку ...

Ответы [ 2 ]

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

Прежде чем вызывать click() по ссылке, которая открывает URL-адрес в Новой вкладке , необходимо сохранить / сохранить WindowHandle родительской вкладки :

//Declare as global variables
String parent_tab;
String child_tab;
// your other code work
@When("^I click on the Visit\\s" + pageElements + "$")
public void iClickFOnTheVisitTourismPEIButton(String element)  {
    parent_tab = driver.getWindowHandle();
    pageModel.pageObject(element).click();
}

После того, как вы вызвали click() рядом с извлечением URL-адреса из Новая вкладка , вы должны вызвать WebDriverWait для обоих numberOfWindowsToBe() 2 и urlContains() следующим образом:

@Then("^I am\\s*((?:not)?)\\staken to the Tourism PEI landing page URL in a new tab$")
public void iAmTakenToTheTourismPEILandingPageURLInANewTab() {

    WebDriverWait wait = new WebDriverWait(driver,5);
    wait.until(ExpectedConditions.numberOfWindowsToBe(2));
    Set<String> s1 = driver.getWindowHandles();
    Iterator<String> i1 = s1.iterator();
    while(i1.hasNext())
    {
        child_tab = i1.next();
        if (!parent_tab.equalsIgnoreCase(child_tab))
        {
        driver.switchTo().window(child_tab);
        new WebDriverWait(driver, 10).until(ExpectedConditions.urlContains("tourismpei.com"));
        String currentURL;
        currentURL = driver.getCurrentUrl();
        if (currentURL.equalsIgnoreCase("https://www.tourismpei.com/")) {
            System.out.println("Matches" + currentURL);
        } else {
        System.out.println("Does not match" + currentURL);
            }
        }
    }
}

Примечание A : поскольку вы использовали driver.getWebDriver(), как в driver.getWebDriver().getCurrentUrl();, вам, возможно, придется заменить всеслучаи driver.* с driver.getWebDriver().*

Примечание B : при сравнении currentURL с примером url вместо использования currentURL.equalsIgnoreCase("https://www.tourismpei.com/") вы можете использовать currentURL.contains("https://www.tourismpei.com/") для совпадения.

Здесь вы найдете подробное обсуждение Лучший способ отслеживать Windows с Selenium в IE11?

0 голосов
/ 30 мая 2018
for (String handle : driver.getWindowHandles()) {
    driver.switchTo().window(handle);
    System.out.println(String.format("handle: %s, url: %s", handle, driver.getWebDriver().getCurrentUrl()));
} 
...