Окна Firefox не закрываются после запуска теста Selenium
я запускал свои тесты Селена с помощью selenium rc около 6 месяцев, и вдруг firefox windows selenium открывается, не закрывается, когда тест завершен.
Я использую определенный профиль firefox и не обновил свою банку selenium rc. Я подумал, что, возможно, последняя сборка firefox, возможно, была проблемой, но я вернулся к firefox 2, и окна все еще остаются открытыми.
Я запускаю тест на Windows коробка.
Я заметил, что у других людей, похоже, есть эта проблема - просто интересно, есть ли у кого-нибудь решение?
спасибо, Gearoid.
10 ответов
моим решением было использовать driver.quit()
(это автоматически закроет браузер Firefox) вместо driver.close()
- хотя было открыто только одно окно Firefox, AFAIK.
очень простое решение в конце-просто называется методом tearDown () SeleniumTestCase (т. е. мы зовем супер.tearDown(); из нашего базового тестового класса)
что успешно закрывает все окна браузера.
У нас была эта проблема и после некоторого расследования мы установили его.
в Selenium RC у вас есть файл "grid_configuration.yml", где у вас есть список браузеров и их соответствующий идентификатор, например "*firefox". В зависимости от вашей среды при выполнении "firefox" вы, вероятно, будете вызывать оболочку, псевдоним или символическую ссылку исполняемого файла firefox. Когда Selenium запускается, он создает некоторый процесс fork для браузера и в зависимости от того, являетесь ли вы вызывая исполняемый файл firefox напрямую или обертку, создание этого процесса отличается, и когда он пытается убить процесс в tearDown (), он фактически убивает дочерний процесс и сохраняет жизнь отца, поэтому tearDown() не закрывает браузер.
решение изменить "grid_configuration.yml "изменение файла" * firefox " для абсолютного пути к исполняемому файлу браузера (всегда с * в начале)
мы используем Microsoft в свободном доступе sysinternals С pskill инструмент для уничтожения процесса браузера (включая firefox).
выполняя pskill "firefox.exe"
Это убьет окно FireFox.
Если вам нужно выполнить на удаленной машине, вы можете использовать [psexec][3]
. Также для обоих есть командные переключатели, чтобы автоматически принимать EULA (- accepteula), поэтому вам не нужно.
Gearóid: я не вижу, как это решит проблему. супер.tearDown () вызывается автоматически после каждого тестового случая любым способом, поэтому дополнительный вызов будет выполняться только дважды.
Я заметил, что окна браузера не закрываются, пока сервер Selenium не остановлен. Итак, в моем случае, если есть 100 тестов selenium, у меня будет 200 окон Firefox, прежде чем они будут закрыты, когда сервер Selenium выйдет.
(Я запускаю Fedora 13 и 3.6.7 Firefox и т. д.)
Если вы используете python в конце вашего демонтажа, используйте super(unittest2.TestCase,self).tearDown()
используя MSTest, я вызывал драйвер.Quit () в TestCleanup, но я продолжаю в конечном итоге с загрузкой окон Firefox, открытых в конце тестов.
Я обнаружил, что исключение NoSuchElementException, похоже, мешает водителю успешно вызвать quit, поэтому завернул TestCleanup с помощью try / finally:
[TestCleanup]
public void TestCleanUp()
{
try
{
driver.FindElement(By.Id("ctl00_btnClearSession")).Click();
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
wait.Until((d) => { return d.FindElement(By.Id("ctl00_btnClearSession")).Displayed; });
}
finally {
driver.Quit();
}
}
это сработало с проблемой, которую я продолжал иметь, но, возможно,мне придется обернуть все мои TestMethods с try / finally. Это далеко идеально, но у меня больше нет открытых окон, когда я это делаю.
У меня была та же проблема. Я запускаю Selenium как часть моих модульных тестов Visual Studio и имел ту же проблему с браузерами Firefox, не закрывающимися в конце тестов.
две вещи исправили это для меня:
1) я обновил папку /core под веб-сайтом с обновленной версией.
2) я обнаружил, что selenium дважды вызывал мой метод настройки в базовом классе. Контр-интуитивно (по крайней мере для меня) кажется, что selenium вызывает метод set up в родительский класс автоматически. Если вы попытаетесь позвонить в создание дочернего класса (т. е. с чем-то вроде базы.setup ()) он будет работать дважды и открывать окна Firefox, которые он не может закрыть. Я удалил звонки на базу.setup () и все мои дополнительные проблемы с окном были решены.
простые дни с 3-го дня рождения вопроса я представляю еще одно неясное решение:
мой Firefox был в специальном месте. Поскольку я не хотел нянчиться с пользовательским аргументом JVM каждый раз, когда я запускал свои тесты Селена локально, я поместил сценарий passthrough в /usr/local/bin
. Предположительно, селен убивал процесс, который он запустил (мой скрипт), а не браузер.
поэтому я вернулся к использованию аргумента JVM для пользовательских местоположений браузера:
-Dwebdriver.firefox.bin="/path/to/firefox"