Что я делаюЗапуск параллельных тестов с 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)). Кажется, что что-то, связанное с предыдущим, было покрыто более поздним запуском. Но до сих пор он не выводил никакого Исключения. Раньше он просто блокировался.