Окна Firefox не закрываются после запуска теста Selenium - PullRequest
11 голосов
/ 12 августа 2010

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

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

Я запускаю тест на Windows box.

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

Спасибо, Gearoid.

Ответы [ 11 ]

9 голосов
/ 05 июня 2012

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

6 голосов
/ 18 августа 2010

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

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

3 голосов
/ 28 сентября 2010

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

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

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

0 голосов
/ 18 февраля 2019

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

0 голосов
/ 05 августа 2013

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

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

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

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

0 голосов
/ 26 марта 2013

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

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

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

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

0 голосов
/ 06 июля 2012

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

0 голосов
/ 01 июля 2011

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

0 голосов
/ 21 сентября 2010

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

0 голосов
/ 06 сентября 2010

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

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

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

...