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

Selenium IDE 3: стартовый уровень
онлайн, начало 19 апреля
Школа для начинающих тестировщиков
онлайн, начало 22 апреля
Тестирование REST API
онлайн, начало 22 апреля
Тестирование юзабилити (usability)
онлайн, начало 24 апреля
Фотография

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

webdriver

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

#1 MoshneagaOleg

MoshneagaOleg

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

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

Отправлено 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
  • 370 сообщений
  • ФИО:Воробьева Татьяна


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

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

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

 

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


  • 0

#3 MoshneagaOleg

MoshneagaOleg

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

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

Отправлено 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
  • 370 сообщений
  • ФИО:Воробьева Татьяна


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

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

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

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

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

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


  • 0

#5 MoshneagaOleg

MoshneagaOleg

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

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

Отправлено 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
  • 370 сообщений
  • ФИО:Воробьева Татьяна


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

А у вас между

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

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

 

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

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


  • 0

#7 MoshneagaOleg

MoshneagaOleg

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

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

Отправлено 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
  • 47 сообщений
  • ФИО:Мошняга Олег Михайлович

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

А у вас между

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

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

 

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

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

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


  • 0


Программирование на С# для тестировщиков
онлайн
Автоматизатор мобильных приложений
онлайн
Selenium WebDriver: полное руководство
онлайн
Программирование на Python для тестировщиков
онлайн




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

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

Яндекс.Метрика
Реклама на портале