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

Фотография

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
  • 833 сообщений


Отправлено 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
  • 833 сообщений


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

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

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


  • 0

#5 OxanaKIseleva

OxanaKIseleva

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

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


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

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

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

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


  • 0

#6 BabyRoot

BabyRoot

    Специалист

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


Отправлено 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


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

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