Окна Firefox не закрываются после запуска теста Selenium

Я проводил свои тесты на селен с использованием selenium rc около 6 месяцев, и внезапно открывающиеся окна selenium firefox не закрываются, когда тест завершен.

Я использую определенный профиль Firefox и не обновляю свою банку selenium rc. Я подумал, что, возможно, проблема была в последней сборке firefox, но я вернулся к firefox 2, и окна все еще остаются открытыми.

Я провожу тест в окне Windows.

Я заметил, что у других людей эта проблема возникает - просто интересно, есть ли у кого-нибудь решение?

Спасибо, Героид.


person Gerard    schedule 12.08.2010    source источник
comment
Чтобы уточнить, запускаете ли вы RC в Windows (чтобы браузер запускался в Windows) или вы запускаете тест в Windows (так что ваш клиентский код запускается в Windows и подключается к RC), или оба?   -  person nirvdrum    schedule 12.08.2010


Ответы (11)


Мое решение заключалось в использовании driver.quit() (это автоматически закроет браузер Firefox) вместо driver.close() - хотя было открыто только одно окно Firefox, AFAIK.

person jsalvata    schedule 04.06.2012

В конце концов, очень простое решение - просто вызвал метод tearDown () в SeleniumTestCase (т.е. мы вызываем super.tearDown (); из нашего базового тестового класса)

Это успешно закрывает все окна браузера.

person Gerard    schedule 18.08.2010
comment
Это основы RC..настройки, тестирования, разборки. :) - person Amit Shakya; 29.03.2013

У нас была эта проблема, и после некоторого расследования мы ее исправили.

В Selenium RC у вас есть файл «grid_configuration.yml», в котором есть список браузеров и их соответствующие идентификаторы, например, «* firefox». В зависимости от вашей среды, когда вы запускаете firefox, вы, вероятно, будете вызывать оболочку, псевдоним или символическую ссылку на исполняемый файл firefox. Когда Selenium запускается, он создает некоторый процесс вилки для браузера, и в зависимости от того, вызываете ли вы исполняемый файл firefox напрямую или оболочку, создание этого процесса отличается, и когда он пытается убить процесс в tearDown (), он фактически убивает дочерний процесс и сохраняет жизнь отца, поэтому tearDown () не закрывает браузер.

Решение состоит в том, чтобы отредактировать файл "grid_configuration.yml", заменив "* firefox" на абсолютный путь к исполняемому файлу браузера (всегда с * в начале).

person victorgp    schedule 27.09.2010

Мы используем свободно доступные sysinternals pskill, чтобы убить процесс браузера (включая firefox).

Выполнив pskill "firefox.exe", которое закроет окно FireFox.

Если вам нужно выполнить это на удаленном компьютере, вы можете использовать [psexec][3]. Также для обоих есть командные переключатели для автоматического принятия EULA (-accepteula), поэтому вам не нужно.

person Zugwalt    schedule 17.08.2010

Героид: Я не понимаю, как это решит проблему. super.tearDown () в любом случае вызывается автоматически после каждого тестового примера, поэтому дополнительный вызов только заставит его запускаться дважды.

Я заметил, что окна браузера не закрываются, пока сервер Selenium не остановлен. Итак, в моем случае, если есть 100 тестов на селен, я бы открыл 200 окон Firefox, прежде чем они в конечном итоге закроются при выходе с сервера Selenium.

(Я использую Fedora 13 и Firefox 3.6.7)

person Mr Auni    schedule 06.09.2010

Используя TestNG, вы можете предварять функцию teardown() аннотацией @AfterMethod или @AfterTest вместо @AfterClass.

person rs79    schedule 20.09.2010

Если вы используете python в конце tearDown, используйте super(unittest2.TestCase,self).tearDown()

person Dan Doyon    schedule 30.06.2011

Используя MSTest, я вызывал driver.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. Это далеко не идеально, но у меня больше не остается открытых окон, когда я это делаю.

person DevDave    schedule 06.07.2012

Я была такая же проблема. Я использую Selenium как часть своих модульных тестов Visual Studio, и у меня возникла та же проблема с браузерами Firefox, которые не закрывались в конце тестов.

Две вещи исправили это для меня:

1) Я обновил папку / core на веб-сайте до последней версии.

2) Я обнаружил, что селен дважды вызывает мой метод настройки в базовом классе. Как ни странно (по крайней мере, для меня) кажется, что селен автоматически вызывает метод настройки в родительском классе. Если вы попытаетесь вызвать его в настройке дочернего класса (то есть с чем-то вроде base.setup ()), он запустится дважды и откроет окна Firefox, которые он не может закрыть. Я удалил вызовы base.setup (), и все мои проблемы с дополнительными окнами были решены.

person David Collett    schedule 26.03.2013

Всего через несколько дней после 3-го дня рождения вопроса я предлагаю еще одно непонятное решение:

Мой Firefox находился в произвольном месте. Поскольку я не хотел присматривать за настраиваемым аргументом JVM каждый раз, когда я запускал свои тесты Selenium локально, я поместил сквозной скрипт в /usr/local/bin. Предположительно, Selenium убивал запускаемый им процесс (мой скрипт), а не браузер.

Итак, я вернулся к использованию аргумента JVM для пользовательских расположений браузера:

-Dwebdriver.firefox.bin="/path/to/firefox"

person inanutshellus    schedule 05.08.2013

У меня была аналогичная проблема, когда браузер Firefox не закрывался / не закрывался после тестового запуска. Наконец, я обнаружил, что это было вызвано чрезмерным количеством строк driver = webdriver.Firefox() в одном из тестовых модулей. Мой env. Selenium с Python и Firefox в Mac OS.

person Lyserty    schedule 17.02.2019