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

Техники локализации плавающих дефектов
онлайн, начало 17 августа
Школа для начинающих тестировщиков
онлайн, начало 20 августа
Программирование на Python для тестировщиков
онлайн, начало 14 августа
Тестирование без требований
онлайн, начало 17 августа
Фотография

Selenium Testng Java Работа с несколькими драйверами в одном тесте

#testng #java #selenium #selenide

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

#1 OxanaKIseleva

OxanaKIseleva

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Киселева Оксана


Отправлено 08 апреля 2020 - 08:12

Добрый день!

 

Подскажите, пожалуйста, как правильно переключаться между двумя экземплярами драйвера WebDriver в одном тесте?  Как сделать, чтобы оба драйвера всегда были доступны в тесте и не удалялись?

 

Первый экземпляр driver для Chroma создается в базовом классе в методе setup с @BeforeMethod при запуске теста.  Второй driver для FireFox создается в самом тесте. 

Driver для FireFox создается в конструкторе класса специально созданного для создания и конфигурирования driver для Firefox. 

 

Код теста:

 @Test(groups = "ui", description = "....")
    public void runChromeFFTest() {
//в запущенном окне Chroma открываю url
        Selenide.open("http://seleniumhq.org/");
//получаю дескриптор окна Chroma
        String windowChromeHandle = WebDriverRunner.getWebDriver().getWindowHandle();
        System.out.println(windowChromeHandle);
//Запускаю FireFox
        OtherBrowserRunner other = new OtherBrowserRunner("firefox");
//в запущенном окне FireFox открываю произвольный url
        other.open("http://seleniumhq.org/");
//Получаю десткриптор окна FireFox
        String windowFireFoxHandle = WebDriverRunner.getWebDriver().getWindowHandle();
//пробую переключиться на окно Chroma 
        WebDriverRunner.getWebDriver().switchTo().window(windowChromeHandle);
        other.close();
    }
 
Код setup()
   @BeforeMethod
    public void setup() {
        final DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        final ChromeOptions options = new ChromeOptions();
        options.addArguments("--lang=en_EN", "--disable-notifications", "--window-size=1200,1080", "--disable-system-timezone-automatic-detection", "--local-timezone");
        capabilities.setCapability(ChromeOptions.CAPABILITY, options);
        capabilities.setPlatform(Platform.WINDOWS);
        try {
            driver = new RemoteWebDriver(URI.create("http://localhost:5555/wd/hub").toURL(), capabilities);
            driver.manage().window().maximize();
            WebDriverRunner.setWebDriver(driver);
            String windowHandle = WebDriverRunner.getWebDriver().getWindowHandle();
            System.out.println(windowHandle);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
 
Код конструктора OtherBrowserRunner
 
public OtherBrowserRunner(String _browser) {
        BROWSER_TYPE = _browser;
        switch (BROWSER_TYPE) {
            case "firefox":
 
                final DesiredCapabilities capabilities_ff = DesiredCapabilities.firefox();
                final FirefoxOptions options_ff = new FirefoxOptions();
                options_ff.addArguments("--lang=en_EN", "--disable-notifications", "--start-maximized", "--disable-system-timezone-automatic-detection", "--local-timezone");
                capabilities_ff.setCapability(FirefoxOptions.FIREFOX_OPTIONS, options_ff);
                capabilities_ff.setCapability("enableVideo", "false");
                capabilities_ff.setCapability(FirefoxDriver.MARIONETTE, true);
                capabilities_ff.setPlatform(Platform.WINDOWS);
                try {
                    if(WebDriverRunner.getWebDriver() != null){
                        driver_ff = new RemoteWebDriver(URI.create("http://localhost:5555/wd/hub").toURL(), capabilities_ff);
                        WebDriverRunner runner = new WebDriverRunner();
                        runner.setWebDriver(driver_ff);
                        driver_ff.manage().window().maximize();
                        String windowHandle = WebDriverRunner.getWebDriver().getWindowHandle();
                        System.out.println(windowHandle);
                    } else {
                        driver_ff = new RemoteWebDriver(URI.create("http://localhost:5555/wd/hub").toURL(), capabilities_ff);
                        WebDriverRunner.setWebDriver(driver_ff);
                        driver_ff.manage().window().maximize();
                        String windowHandle = WebDriverRunner.getWebDriver().getWindowHandle();
                        System.out.println(windowHandle);
                    }
                }
                catch (Exception e) {
                    e.printStackTrace();
                }                
                break;
            case "IE":
                break;
            case "YANDEX":
                break;
        }
    }
 
Код метода open() для OtherBrowserRunner
public void open(String _url) { Selenide.open(_url)}
 
В результате возвращается ошибка 
org.openqa.selenium.NoSuchWindowException: Unable to locate window: CDwindow-82A02A38A1E123E586017229486E23F2
 
 

 


  • 0

#2 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 767 сообщений


Отправлено 08 апреля 2020 - 11:01

https://ru.selenide....selenide-5.0.0/


  • 0

#3 OxanaKIseleva

OxanaKIseleva

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Киселева Оксана


Отправлено 08 апреля 2020 - 12:36

Спасибо!

 

Вот это понравилось:

Возможность открывать два браузера в одном тесте

Прежде всего: не используйте эту возможность!
Открывать два браузера в одном тесте - это в большинстве случаев плохая практика.


  • 0

#4 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 767 сообщений


Отправлено 08 апреля 2020 - 13:16

Возвращаясь к моему ответу из другого поста - надо - так надо )))

Вам же это для одного теста надо, но видно по самой сути - вы занимаетесь тестированием браузера, а не приложения, достаточно просто проверить сохранённую куку в любом браузере на корректность.


  • 0

#5 OxanaKIseleva

OxanaKIseleva

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Киселева Оксана


Отправлено 08 апреля 2020 - 13:37

Возвращаясь к моему ответу из другого поста - надо - так надо )))

Вам же это для одного теста надо, но видно по самой сути - вы занимаетесь тестированием браузера, а не приложения, достаточно просто проверить сохранённую куку в любом браузере на корректность.

Изначально, попыталась раздробить одну большую проблему на простые части. Видимо, это было не оч хорошим решением. Я новичок в автотестировании.  Сам тест называется "Проверка корректного входа в разных вкладках/браузерах/устройствах" и в нем требуется скакать по разным браузерам и их вкладкам авторизовываться там, проверять куки. Т.е. проверяется авотризация, а не браузер.


  • 0

#6 BabyRoot

BabyRoot

    Специалист

  • Members
  • PipPipPipPipPip
  • 767 сообщений


Отправлено 08 апреля 2020 - 13:47

Так и это получается идёт тестирование браузера)) Достаточно проверить что авторизация происходит. Ну ещё, конечно, проверить что она происходит просто в нужных браузерах (смотрится по статистике посещения, берётся там топ 5 и в них проверяется). но и из этих топ 5, скорее всего 3-4 будут на движке хромиума, и получается что достаточно будет проверить в 1 хроме. Но опять же из глобальных хотелок, вам просто надо сделать ваш фреймворк независимым от типа браузера, и в начале запуска указывать в каком браузере выполняться (а поддержку браузеров вынести в отдельный класс, либо использовать ту что уже имеет Селенид https://github.com/s...selenide-uses).


  • 0

#7 OxanaKIseleva

OxanaKIseleva

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

  • Members
  • Pip
  • 20 сообщений
  • ФИО:Киселева Оксана


Отправлено 08 апреля 2020 - 19:45

Так и это получается идёт тестирование браузера)) Достаточно проверить что авторизация происходит. Ну ещё, конечно, проверить что она происходит просто в нужных браузерах (смотрится по статистике посещения, берётся там топ 5 и в них проверяется). но и из этих топ 5, скорее всего 3-4 будут на движке хромиума, и получается что достаточно будет проверить в 1 хроме. Но опять же из глобальных хотелок, вам просто надо сделать ваш фреймворк независимым от типа браузера, и в начале запуска указывать в каком браузере выполняться (а поддержку браузеров вынести в отдельный класс, либо использовать ту что уже имеет Селенид https://github.com/s...selenide-uses).

Спасибо большое


  • 0


Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн



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

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

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