Запуск параллельных тестов с помощью RemoteDriver + SeleniumGrid

Что я делаю

Я пытаюсь запустить параллельный тест java selenium-webdriver с Selenium-Grid, который был интегрирован в selenium-server-standalone-2.47.1.jar. Я намерен запустить несколько экземпляров Firefox для одновременного выполнения разных задач. Кстати, я не буду использовать TesgNG или JUnit.

Что я сделал

Удобно для вас, ребята, я предоставлю только часть своего кода.

У меня есть преобразователь Firefox здесь.

public class FirefoxResolver implements Resolver{
    WebDriver driver;

    @Override
        public void connectHub() {
            DesiredCapabilities dc = DesiredCapabilities.firefox();

            dc.setBrowserName("firefox");

            dc.setPlatform(Platform.WINDOWS);


            try {
                URL url = new URL(BrowserFactory.HUB); //Here I am sure I connect to a correct hub

                driver = new RemoteWebDriver(url, dc);
            } catch(ANYEXCEPTION HERE) {

            }

    @Override
    public WebDriver getDriver() {

        return driver;
    }
}

И вот у меня есть Main Runnable

public class MainRunner implements Runnable{
    @Override
    public void run() {
    Resolver r = BrowserFactory.getInstance().getBrowserResolver(
                        browser);

                r.connectHub();

                driver = r.getDriver();
     /************************************************
     Use driver to do something then.
     /************************************************

     **Finally here I use a driver.quit() to shutdown the driver created in current thread. I have also tried driver.close()**

    }
    }

После запуска мой основной процессор запустит новый поток для запуска MainRunner. Я отладил и обнаружил, что на самом деле сгенерированы разные экземпляры «драйвера».

Также я провел исследование:

Вам следует использовать Selenium Grid, если вы хотите выполнить одно или оба из следующих действий:

Запускайте тесты в разных браузерах, операционных системах и машинах одновременно. Это гарантирует, что тестируемое приложение будет полностью совместимо с широким спектром комбинаций ОС браузера.

Экономьте время при выполнении наборов тестов. Если вы настроите Selenium Grid на выполнение, скажем, 4 тестов одновременно, вы сможете завершить весь набор примерно в 4 раза быстрее.

Проблема

Когда я одновременно запускал два случая с помощью Firefox, они, похоже, используют один и тот же сеанс и взаимодействуют друг с другом. Разворачиваю ли я узел на другой машине или нет. Ни одно из дел не увенчалось успехом. Кажется, что если один из кейсов завершился и вызывает driver.quit() или driver.close(), другой не может продолжать выполнение. Вот информация о трассировке стека, если я использую driver.close():

Исключение в потоке "Thread-26" org.openqa.selenium.WebDriverException: ошибка связи с удаленным браузером. Возможно, оно умерло.

Информация о сборке: версия: «2.47.1», ревизия: «411b314», время: «2015-07-30 03:03:16» Информация о системе: хост: «J.Lyu», ip: «192.168.6.71», os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_21'

Информация о драйвере: driver.version: EventFiringWebDriver

Продолжительность команды или время ожидания: 1,51 секунды

Информация о сборке: версия: «2.47.1», ревизия: «неизвестно», время: «2015-07-30 11:02:44» Информация о системе: хост: «J.Lyu», ip: «192.168.6.71», os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_21' Идентификатор сеанса: 2b73c6e8-f601-4259-9646-9a53241fe074 Информация о драйвере: org Возможности .openqa.selenium.remote.RemoteWebDriver [{platform=WINDOWS, javascriptEnabled=true, acceptSslCerts=true, browserName=firefox, rotatable=false, locationContextEnabled=true, webdriver.remote.sessionid=2b73c6e8-f601-4259-9646-9a53241fe074 , version=40.0.3, databaseEnabled=true, cssSelectorsEnabled=true, handlesAlerts=true, webStorageEnabled=true, nativeEvents=false, applicationCacheEnabled=true, takeScreenshot=true}]

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor .newInstance(Constructor.java:525) в org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206) в org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)

на org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:595) на org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:618) на org.openqa.selenium.remote.RemoteWebDriver.close (RemoteWebDriver.java:459) на com.milanoo.qa.runtime.module.MainRunner.run(MainRunner.java:167) на java.lang.Thread.run(Thread.java:722)

Причина: org.openqa.selenium.remote.UnreachableBrowserException: ошибка связи с удаленным браузером. Возможно, оно умерло. Информация о сборке: версия: «2.47.1», ревизия: «411b314», время: «2015-07-30 03:03:16» Информация о системе: хост: «J.Lyu», ip: «192.168.6.71», os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_21' Информация о драйвере: driver.version: EventFiringWebDriver Информация о сборке: версия: '2.47. 1", ревизия: "неизвестно", время: "2015-07-30 11:02:44" Информация о системе: хост: "J.Lyu", ip: "192.168.6.71", os.name: "Windows 7" , os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_21' Информация о драйвере: driver.version: неизвестно

Может ли кто-нибудь помочь с этим? Большое спасибо, и если вы хотите получить дополнительную информацию, пожалуйста, дайте мне знать.

Обновление 12.10.2015, 11:51

Я пробовал это, даже если я не использую какую-либо команду выключения (закрыть или удалить), проблема все еще существует.

Я проверил сообщение журнала концентратора, а затем обнаружил, что более позднее выполненное всегда будет успешным, а более раннее - неудачным (независимо от того, запускаю ли я только один узел или два узла И находятся ли они на разных машинах (VM или RM)). Кажется, что-то, связанное с более ранним, было покрыто более поздним. Но до сих пор он не выдал никаких исключений. Предыдущий просто заблокировал.


person J.Lyu    schedule 12.10.2015    source источник


Ответы (1)


Ребят, наконец-то я понял. Я использовал @Autowired, предоставленный Spring, чтобы пометить мой Runnable (MainRunner). И, согласно моему исследованию, класс, аннотированный @Autowired, является синглтоном. Это все мои ошибки и спасибо вам, ребята, за внимание.

person J.Lyu    schedule 13.10.2015