Перейти к содержимому

Фотография

Помогите написать методы для переключения между окнами браузера

webdriver

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 MoshneagaOleg

MoshneagaOleg

    Новый участник

  • Members
  • Pip
  • 48 сообщений
  • ФИО:Мошняга Олег Михайлович

Отправлено 26 июля 2018 - 07:03

Не могу переключится между окнами, нажимаю кнопку авторизации через соц сеть (к примеру одноклассники) всплывает новое стандартное окно для авторизации (которое у меня уже описано в page object)
 

написал методы 

 

получение текущей страницы 

public void getMainWindow(String mainPage){
        mainPage = driver.getWindowHandle();
    }

переключение окна 

public void getNevHandle(){
        for (String windowHandle : driver.getWindowHandles()){
            driver.switchTo().window(windowHandle);
        }
    }

но при запуске теста или дебага не работает эта штука (


  • 0

#2 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 26 июля 2018 - 07:18

Нужно сначала из общего списка страниц (driver.getWindowHandles()) удалить "текущую" (mainHandle). Тогда в списке останется только одна, на неё и будет переключаться.

Либо просто добавить перед driver.switchTo - if (!windowHandle.equals(mainHandle)).

 

п.с.: после того как закончите работу с "новой страницей" и закроете её - надо будет переключиться обратно на mainHandle.


  • 0

#3 MoshneagaOleg

MoshneagaOleg

    Новый участник

  • Members
  • Pip
  • 48 сообщений
  • ФИО:Мошняга Олег Михайлович

Отправлено 26 июля 2018 - 07:55

Нужно сначала из общего списка страниц (driver.getWindowHandles()) удалить "текущую" (mainHandle). Тогда в списке останется только одна, на неё и будет переключаться.

Либо просто добавить перед driver.switchTo - if (!windowHandle.equals(mainHandle)).

 

п.с.: после того как закончите работу с "новой страницей" и закроете её - надо будет переключиться обратно на mainHandle.

String mainPage = driver.getWindowHandle();  При дебаге выдает driver : null это значит что он не получил текущую страницу, как быть тогда ?   


  • 0

#4 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 26 июля 2018 - 08:00

String mainPage = driver.getWindowHandle();  При дебаге выдает driver : null это значит что он не получил текущую страницу, как быть тогда ?   

Вы привели кусочек кода, всего лишь.

Сложно сказать, где и что у вас делается. Лучше покажите целиком весь тест (особенно - то, где вы вызываете getMainWindow()).

Кстати, не совсем понятно, зачем присваивать значение driver.getWindowHandle() переменной, которую Вы в этот метод передаете.

mainHandle - можно сделать переменной класса, а не метода. Иначе первый кусочек кода из первого поста - просто не имеет никакого смысла.


  • 0

#5 MoshneagaOleg

MoshneagaOleg

    Новый участник

  • Members
  • Pip
  • 48 сообщений
  • ФИО:Мошняга Олег Михайлович

Отправлено 26 июля 2018 - 08:06

 

String mainPage = driver.getWindowHandle();  При дебаге выдает driver : null это значит что он не получил текущую страницу, как быть тогда ?   

Вы привели кусочек кода, всего лишь.

Сложно сказать, где и что у вас делается. Лучше покажите целиком весь тест (особенно - то, где вы вызываете getMainWindow()).

Кстати, не совсем понятно, зачем присваивать значение driver.getWindowHandle() переменной, которую Вы в этот метод передаете.

mainHandle - можно сделать переменной класса, а не метода. Иначе первый кусочек кода из первого поста - просто не имеет никакого смысла.

 

@Given("^User should be on the (.*) and (.*)$")
  public void userShouldBeOnTheIndexPage(String pageLogin, String pageOdnoklassniki) throws Throwable {

    LoginPage loginPage = uiScenarioContext.getPage(pageLogin); 
    loginPage.open(); //открываю страницу для авторизации 

    String mainPage = driver.getWindowHandle();
    assertThat("User is on page: " + pageLogin, loginPage.getUrl(), is(uiScenarioContext.getBrowser().getCurrentUrl())); //тут проверка проходит что мы на этой странице, но при добавлении метода переключения, перестает работать 

    loginPage.getAuthFromOdnoklassniki().click(); //кликаю на кнопку авторизации 

    for (String windowHandle : driver.getWindowHandles()){
          if (!windowHandle.equals(mainPage))
          driver.switchTo().window(windowHandle);
    }

  • 0

#6 TatyanaV

TatyanaV

    Опытный участник

  • Members
  • PipPipPipPip
  • 388 сообщений
  • ФИО:Воробьева Татьяна


Отправлено 26 июля 2018 - 08:19

А у вас между

loginPage.open()
и
String mainPage = driver.getWindowHandle()

успевает запуститься браузер и открыться страница?

 

Что именно делает assertThat (лучше код, а не объяснение)?

Не понятно, с чего он вдруг ломаться должен, если переключение на другое "окно" идёт уже поле этого.


  • 0

#7 MoshneagaOleg

MoshneagaOleg

    Новый участник

  • Members
  • Pip
  • 48 сообщений
  • ФИО:Мошняга Олег Михайлович

Отправлено 26 июля 2018 - 08:31

А у вас между

loginPage.open()
и
String mainPage = driver.getWindowHandle()

успевает запуститься браузер и открыться страница?

 

Что именно делает assertThat (лучше код, а не объяснение)?

Не понятно, с чего он вдруг ломаться должен, если переключение на другое "окно" идёт уже поле этого.

Framework не мною написан его, я методом тыка узнаю его, опыт был только работы с голым web driver 
нашел решение получение драйвера вот такое 
String mainPage = uiScenarioContext.getBrowser().getDriver().getWindowHandle();

теперь все работает только проблема уже в другом )


  • 0

#8 Noksa

Noksa

    Активный участник

  • Members
  • PipPip
  • 117 сообщений
  • ФИО:Александр

Отправлено 26 июля 2018 - 08:43

Я использую для переключения на новое окно такой метод:

public static void SwitchToNewWindow<T>(this T page, Action<T> action) where T : BasePage
        {
            var handlesBefore = DriverManager.Driver.WindowHandles.Count;
            action.Invoke(page);
            DriverManager.Driver.Wait()
                .Until(() => handlesBefore != DriverManager.Driver.WindowHandles.Count);
            if (handlesBefore == DriverManager.Driver.WindowHandles.Count)
                throw new NullReferenceException(
                    "Количество открытых окон в браузере не изменилось. Новое окно не открылось.");
            DriverManager.Driver.SwitchTo().Window(DriverManager.Driver.WindowHandles.Last());
        }

Соответственно работает как-то так:

Pages.GetPage<ReturnsPage>().SwitchToNewWindow(_ => _.TransferSelectedToCourier());

  • 0

#9 MoshneagaOleg

MoshneagaOleg

    Новый участник

  • Members
  • Pip
  • 48 сообщений
  • ФИО:Мошняга Олег Михайлович

Отправлено 26 июля 2018 - 10:17

А у вас между

loginPage.open()
и
String mainPage = driver.getWindowHandle()

успевает запуститься браузер и открыться страница?

 

Что именно делает assertThat (лучше код, а не объяснение)?

Не понятно, с чего он вдруг ломаться должен, если переключение на другое "окно" идёт уже поле этого.

assertThat это из библиотеки hamcrest позволяет писать более гибкие проверки, сам только все это учу )


  • 0



Темы с аналогичным тегами webdriver

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных