Мы работаем в инфраструктуре, которая иногда сильно тормозит. Что мы видим, так это то, что когда мы делаем вызов remotewebdriver, запускается firefox.exe, но из-за того, что машина очень медленная и у нас есть 15-секундный тайм-аут, создание веб-драйвера не удается. Итак, мы потерпели неудачу, но теперь у нас есть румяный процесс firefox, использующий память - после того, как тонны сборок запущены на наших удаленных машинах с селеном, мы видим сотни оставшихся процессов firefox, сидящих там. Я не могу закрыть или выйти из драйвера - у меня нет драйвера, так как вызов remotewebdriver не удался .... как я могу узнать, какой процесс Firefox мы только что создали, чтобы убить его? Это то, что должно быть очищено селеном? Мы используем java.
Selenium remotewebdriver запускает двоичный файл браузера, но не получает веб-драйвер — как я могу очистить процесс браузера
Ответы (2)
Чтобы избежать подобных проблем, вы должны убедиться, что driver.quit()
вызывается, когда браузер больше не требуется.
Предполагая стек Java, скорее всего, вы используете платформу TestNG или JUnit. Лучшим местом для освобождения ресурсов будет либо один из @After...
методов (в зависимости от выбранной стратегии управления сеансом), либо специальные слушатели. Например:
@AfterMethod
public void tearDown() {
if (driver != null)
driver.quit();
}
Как вы упомянули firefox.exe is started but because the machine is so slow and we have a 15 second timeout, creating the webdriver does not succeed
и see hundreds of leftover firefox processes sitting out there
, у меня есть 4 решение, которое может вам подойти.
- Поскольку наша цель - протестировать приложение, я думаю, что мы все равно не должны возиться с загрузкой страницы. Установка
15 second timeout
приведет только к провалу наших попыток активировать приложение, чтобы начать процесс тестирования. Следовательно, лучшей альтернативой было бы позволить экземпляруWebDriver
запускать приложение в обычном режиме, чтобыSelenium
получил чистыйDocument.readyState == complete
изDOM tree
- Поскольку вы говорили о том, что машина работает медленно, самым следующим действием будет убедиться, что
Test Bed
настроен с требуемымHardware (CPU, RAM, ROM, Cache) and Software (Selenium, WebDriver, WebBrowser versions) resources
. Убедитесь, чтоTest Machines
, на котором запущеныAutomation Script
иTestcases
, изолированы от других взаимодействий пользователей. - Кроме того, если вы хотите сократить время загрузки страницы и хотите начать взаимодействие с
WebElements
, как только они загрузятся, в этом случае вы можете рассмотреть возможность настройкиpageLoadStrategy
. Настройкой по умолчанию дляpageLoadStrategy
являетсяnormal
, которую мы можем изменить наeager
. УстановкаpageLoadStrategy
вeager
подразумевает, что как толькоWebElements
загружаются вHTML DOM
иinteractive
, ваш скрипт возобновляет выполнение. Теперь основную проблему с
hundreds of leftover firefox processes sitting out there
можно решить, сохранив блокирующую часть кода в блокеtry
. Если блок кода в пределахtry
завершается успешно, наш скрипт продолжает работу. В случае сбояtry
мы вызовемquit()
в блокеcatch()
, чтобы экземпляр браузера Firefox и экземплярWebDriver
корректно завершили работу. Схема блока кода выглядит следующим образом:import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class Q45703729_firefox_process { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); try { driver.get("https://stackoverflow.com"); System.out.println("Application opened"); } catch (Exception e) { System.out.println("Unable to open Application. Quiting ..."); driver.quit(); } System.out.println("Page Title is : "+driver.getTitle()); //Do other tasks driver.quit(); } }
firefox.exe is started but because the machine....
, которую вы подчеркиваете и собираетесь ответить, заключена в формат кода. Поэтому я думаю, было бы лучше, если бы вы выделили ее курсивом или полужирным шрифтом. Пункт 2: да, с фигурными скобками проблем нет, я меняю их для большей читабельности. В любом случае у меня есть откат изменений.
- person NarendraR; 16.08.2017