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

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

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

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

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

Спасибо, Gearoid.

Ответ 1

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

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

Ответ 2

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

Ответ 3

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

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

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

Ответ 4

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

Запустив pskill "firefox.exe", он убьет окно FireFox.

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

Ответ 5

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

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

(Я запускаю Fedora 13 и Firefox 3.6.7)

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

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

Ответ 10

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

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

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

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