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

OxanaKIseleva

Регистрация: 29 июл 2015
Offline Активность: 02 июл 2022 13:06
-----

Мои темы

Параллельный запуск тестов Все стартует в одном окне браузера

14 мая 2020 - 14:00

Добрый день!
Подскажите, пожалуйста, в чем ошибка?
Хочу запустить тесты параллельно в нескольких окнах браузера, но при запуске в консоли вижу, что стартует несколько потоков, которые почему-то выполняются в одном окне браузера.
Всего 9 тестов, по три теста в каждом тестовом классе. Все тестовые классы наследуются от базового класса, в котором прописаны методы BeforeClass и AfterClass.
Параллельный запуск настраиваю в файле testng.xml <test name="TestProjectPDTC" parallel="classes" thread-count="9" verbose="10">
Базовый класс:
public class ParallelStartBaseClass {
    
    private RemoteWebDriver driver;
    public static ThreadLocal<RemoteWebDriver> tlDriver = new ThreadLocal<>();
 
    public ParallelStartBaseClass(){
        super();
        return;
    }
 
    @BeforeClass
    public void setup(){
 
        System.out.println(Thread.currentThread().getName());
 
        if(tlDriver.get() != null){
            driver= tlDriver.get();
            return;
        }
        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.ANY);        
        try {
            driver= new RemoteWebDriver(URI.create("http://localhost:5557/wd/hub").toURL(), capabilities);
            driver.manage().window().maximize();
            WebDriverRunner.setWebDriver(driver);
            tlDriver.set(driver);
            String windowHandle = WebDriverRunner.getWebDriver().getWindowHandle();
            System.out.println(windowHandle);
            System.out.println(Thread.currentThread().getName());
            System.out.println(tlDriver.get().getSessionId());
            Runtime.getRuntime().addShutdownHook(
                    new Thread( ()-> { clearBrowserCache(); driver.quit(); tlDriver.remove();
                        System.out.println("Выход из программы");}));
 
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
 
   @AfterClass
   public void close(){
       closeWebDriver();
       tlDriver.remove();
    }
 
}
 
 
Лог из Idea:
 
мая 14, 2020 3:27:56 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
CDwindow-F0F1D8FD4CA7FC5FA67B30AB7119B6DB
TestNG-test=TestProjectPDTC-3
cb559a0433bcaf699a5d50e57dad8991
 
TestNG-test=TestProjectPDTC-2
TestNG-test=TestProjectPDTC-3
TestNG-test=TestProjectPDTC-1
мая 14, 2020 3:27:25 PM org.openqa.selenium.remote.DesiredCapabilities chrome
INFO: Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
мая 14, 2020 3:27:25 PM org.openqa.selenium.remote.DesiredCapabilities chrome
INFO: Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
мая 14, 2020 3:27:25 PM org.openqa.selenium.remote.DesiredCapabilities chrome
INFO: Using `new ChromeOptions()` is preferred to `DesiredCapabilities.chrome()`
мая 14, 2020 3:27:29 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org...ticLoggerBinder for further details.
CDwindow-493B44CD0E531190047F02FD2921B4E5
TestNG-test=TestProjectPDTC-2
38b010d74de5eec5fa07719d68fff28c
 
мая 14, 2020 3:27:47 PM org.openqa.selenium.remote.ProtocolHandshake createSession
INFO: Detected dialect: W3C
CDwindow-ABF75A680BC927A64C419F6302D6596D
TestNG-test=TestProjectPDTC-1
e01dc632c7fe5352a636bb238bb3a7c5
 
===== Invoked methods
  ParallelStartBaseClass.setup()[pri:0, instance:ParallelStart.TestClassOne@4b9e13df] 1268650975
  ParallelStartBaseClass.setup()[pri:0, instance:ParallelStart.ThreeTestClass@475530b9] 1196765369
  ParallelStartBaseClass.setup()[pri:0, instance:ParallelStart.TwoTestClass@2b98378d] 731395981
    TwoTestClass.ThreeTestTwoTestClass()[pri:0, instance:ParallelStart.TwoTestClass@2b98378d] 731395981
  ParallelStartBaseClass.close()[pri:0, instance:ParallelStart.TwoTestClass@2b98378d] 731395981
    TestClassOne.OneTestOneTestClass()[pri:0, instance:ParallelStart.TestClassOne@4b9e13df] 1268650975
    TestClassOne.ThreeTestOneTestClass()[pri:0, instance:ParallelStart.TestClassOne@4b9e13df] 1268650975
    TestClassOne.TwoTestOneTestClass()[pri:0, instance:ParallelStart.TestClassOne@4b9e13df] 1268650975
  ParallelStartBaseClass.close()[pri:0, instance:ParallelStart.TestClassOne@4b9e13df] 1268650975
    ThreeTestClass.OneTestThreeTestClass()[pri:0, instance:ParallelStart.ThreeTestClass@475530b9] 1196765369
    ThreeTestClass.ThreeTestThreeTestClass()[pri:0, instance:ParallelStart.ThreeTestClass@475530b9] 1196765369
    ThreeTestClass.TwoTestThreeTestClass()[pri:0, instance:ParallelStart.ThreeTestClass@475530b9] 1196765369
  ParallelStartBaseClass.close()[pri:0, instance:ParallelStart.ThreeTestClass@475530b9] 1196765369
=====
 
===============================================
TestProjectPDTC
Total tests run: 7, Passes: 7, Failures: 0, Skips: 0
===============================================
 
Выход из программы
Выход из программы
Выход из программы
 
Process finished with exit code 0

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

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
 
 

 


Запуск нескольких экземпляров WebDriver в одном тесте

07 апреля 2020 - 11:44

Selenium+Java+Testng
 
Добрый день!
Просьба помочь с реализацией теста. Как правильно запустить и закрыть несколько экземпляров драйвера в рамках одного теста.
Если конкретно:
У меня вопрос как правильнее запустить оба driver и как правильно в конце теста убить оба? А также как правильно переключаться между двумя driver в одном тесте?
 
Задача: 
1. Запустить Browser 1, например, Chrome.
2. В Chrome открытть несколько вкладок, выполнить на них какие-то действия. Запомнить cookie
3. Запустить Browser 2, например, FireFox.
4. В FireFox открытть несколько вкладок, выполнить на них какие-то действия. Запомнить cookie.
5. Сравнить cookie полученные из Browser 1 и Browser 2.
 
У меня реализовано так:
есть базовый класс BaseTestClass для теста (класс теста его наследник, FirstTestClass extends BaseTestClass), в @BeforeMethod setup() которого реализовала запуск Chrome.
затем в теле самого теста запускаю Fifefox.
Убиваю оба драйвера в 
 
@AfterMethod
public void after(){
Selenide.clearBrowserCookies();
closeWebDriver();
clearBrowserCache();
driver.quit();
}