1

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

Я пытаюсь запустить параллельный Java тест селеном WebDriver с SeleniumGrid которая была интегрирована в 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; 
    } 
} 

А вот у меня есть Главная 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. Я отлаживал и обнаружил, что на самом деле существует отличный экземпляр «driver».

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

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

Выполнить тесты против различных браузеров, операционных систем и машин все в то же самое время. Это гарантирует, что тестируемое приложение полностью совместимо с широким спектром комбинаций браузера и O.S.

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

Выпуск

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

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

Информация о конструкции: версия: '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' информации системы : host: 'J.Lyu', ip: '192.168.6.71', os.name: 'Windows 7 ', os.arch:' x86 ', os.version:' 6.1 ', java.version:' 1.7.0_21' Session ID: Информация 2b73c6e8-f601-4259-9646-9a53241fe074 Driver: org.openqa.selenium.remote.RemoteWebDriver Возможности [{платформа = WINDOWS, javascriptEnabled = верно, acceptSslCerts = верно, browserName = светлячок, с возможностью вращения = 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 = правда, takesScreenshot = TRUE}]

на sun.reflect.NativeConstructorAccessorImpl.newInstance0 (нативный метод) на sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:57) в sun.reflect.DelegatingConstructorAccessorI mpl.newInstance (DelegatingConstructorAccessorImpl.java:45) на 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) at 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', версия: 'unknown', время: '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 информация: driver.version: неизвестно

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

Update 2015/10/12 11:51

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

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

ответ

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^