Окна 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 и т. д.)


использовании TestNG, перед с @AfterMethod или @AfterTest аннотаций, вместо @AfterClass.


Если вы используете 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"