Selenium как закрыть браузер
Продолжение перевода неофициальной документации Selenium для Python.
Перевод сделан с разрешения автора Baiju Muthukadan.
Оригинал можно найти здесь.
Содержание:
2.1. Простое использование
Если вы установили привязку Selenium к Python, вы можете начать использовать ее с помощью интерпретатора Python.
Код выше может быть сохранен в файл (к примеру, python_org_search.py), и запущен:
Запускаемый вами Python должен содержать установленный модуль selenium.
2.2. Пошаговый разбор примера
Модуль selenium.webdriver предоставляет весь функционал WebDriver'а. На данный момент WebDriver поддерживает реализации Firefox, Chrome, Ie и Remote. Класс Keys обеспечивает взаимодействие с командами клавиатуры, такими как RETURN, F1, ALT и т.д…
Далее создается элемент класса Firefox WebDriver.
Метод driver.get перенаправляет к странице URL в параметре. WebDriver будет ждать пока страница не загрузится полностью (то есть, событие “onload” игнорируется), прежде чем передать контроль вашему тесту или скрипту. Стоит отметить, что если страница использует много AJAX-кода при загрузке, то WebDriver может не распознать, загрузилась ли она полностью:
Следующая строка — это утверждение (англ. assertion), что заголовок содержит слово “Python” [assert позволяет проверять предположения о значениях произвольных данных в произвольном месте программы. По своей сути assert напоминает констатацию факта, расположенную посреди кода программы. В случаях, когда произнесенное утверждение не верно, assert возбуждает исключение. Такое поведение позволяет контролировать выполнение программы в строго определенном русле. Отличие assert от условий заключается в том, что программа с assert не приемлет иного хода событий, считая дальнейшее выполнение программы или функции бессмысленным — Прим. пер.]:
WebDriver предоставляет ряд способов получения элементов с помощью методов find_element_by_*. Для примера, элемент ввода текста input может быть найден по его атрибуту name методом find_element_by_name. Подробное описание методов поиска элементов можно найти в главе Поиск Элементов:
После ответа страницы, вы получите результат, если таковой ожидается. Чтобы удостовериться, что мы получили какой-либо результат, добавим утверждение:
В завершение, окно браузера закрывается. Вы можете также вызывать метод quit вместо close. Метод quit закроет браузер полностью, в то время как close закроет одну вкладку. Однако, в случае, когда открыта только одна вкладка, по умолчанию большинство браузеров закрывается полностью:
2.3. Использование Selenium для написания тестов
Вы можете запустить тест выше из командной строки следующей командой:
Результат сверху показывает, что тест завершился успешно.
2.4. Пошаговый разбор примера
Сначала были импортированы все основные необходимые модули. Модуль unittest встроен в Python и реализован на Java’s JUnit. Этот модуль предоставляет собой утилиту для организации тестов.
Модуль selenium.webdriver предоставляет весь функционал WebDriver'а. На данный момент WebDriver поддерживает реализации Firefox, Chrome, Ie и Remote. Класс Keys обеспечивает взаимодействие с командами клавиатуры, такими как RETURN, F1, ALT и т.д…
setUp — это часть инициализации, этот метод будет вызываться перед каждым методом теста, который вы собираетесь написать внутри класса теста. Здесь мы создаем элемент класса Firefox WebDriver.
Далее описан метод нашего теста. Метод теста всегда должен начинаться с фразы test. Первая строка метода создает локальную ссылку на объект драйвера, созданный методом setUp.
Метод driver.get перенаправляет к странице URL в параметре. WebDriver будет ждать пока страница не загрузится полностью (то есть, событие “onload” игнорируется), прежде чем передать контроль вашему тесту или скрипту. Стоит отметить, что если страница использует много AJAX-кода при загрузке, то WebDriver может не распознать, загрузилась ли она полностью:
Следующая строка — это утверждение, что заголовок содержит слово “Python”:
WebDriver предоставляет ряд способов получения элементов с помощью методов find_element_by_*. Для примера, элемент ввода текста input может быть найден по его атрибуту name методом find_element_by_name. Подробное описание методов поиска элементов можно найти в главе Поиск Элементов:
После ответа страницы, вы получите результат, если таковой ожидается. Чтобы удостовериться, что мы получили какой-либо результат, добавим утверждение:
Метод tearDown будет вызван после каждого метода теста. Это метод для действий чистки. В текущем методе реализовано закрытие окна браузера. Вы можете также вызывать метод quit вместо close. Метод quit закроет браузер полностью, в то время как close закроет одну вкладку. Однако, в случае, когда открыта только одна вкладка, по умолчанию большинство браузеров закрывается полностью.:
Завершающий код — это стандартная вставка кода для запуска набора тестов [Сравнение __name__ с "__main__" означает, что модуль (файл программы) запущен как отдельная программа («main» (англ.) — «основная», «главная») (а не импортирован из другого модуля). Если вы импортируете модуль, атрибут модуля __name__ будет равен имени файла без каталога и расширения — Прим. пер.]:
2.5. Использование Selenium с remote WebDriver
Для использования remote WebDriver (удаленного веб-драйвера) необходимо запустить Selenium server. Для запуска сервера используйте команду:
Строка выше сообщает о том, что вы можете использовать указанный URL для подключения remote WebDriver. Ниже приводится несколько примеров:
Переменная desired_capabilities — это словарь. Вместо того, чтобы использовать словари по умолчанию, вы можете явно прописать значения:
WebDriver does not make the distinction between windows and tabs. If your site opens a new tab or window, Selenium will let you work with it using a window handle. Each window has a unique identifier which remains persistent in a single session. You can get the window handle of the current window by using:
Switching windows or tabs
Clicking a link which opens in a new window will focus the new window or tab on screen, but WebDriver will not know which window the Operating System considers active. To work with the new window you will need to switch to it. If you have only two tabs or windows open, and you know which window you start with, by the process of elimination you can loop over both windows or tabs that WebDriver can see, and switch to the one which is not the original.
However, Selenium 4 provides a new api NewWindow which creates a new tab (or) new window and automatically switches to it.
Create new window (or) new tab and switch
Creates a new window (or) tab and will focus the new window or tab on screen. You don’t need to switch to work with the new window (or) tab. If you have more than two windows (or) tabs opened other than the new window, you can loop over both windows or tabs that WebDriver can see, and switch to the one which is not the original.
Note: This feature works with Selenium 4 and later versions.
Closing a window or tab
When you are finished with a window or tab and it is not the last window or tab open in your browser, you should close it and switch back to the window you were using previously. Assuming you followed the code sample in the previous section you will have the previous window handle stored in a variable. Put this together and you will get:
Forgetting to switch back to another window handle after closing a window will leave WebDriver executing on the now closed page, and will trigger a No Such Window Exception. You must switch back to a valid window handle in order to continue execution.
Quitting the browser at the end of a session
When you are finished with the browser session you should call quit, instead of close:
- Quit will:
- Close all the windows and tabs associated with that WebDriver session
- Close the browser process
- Close the background driver process
- Notify Selenium Grid that the browser is no longer in use so it can be used by another session (if you are using Selenium Grid)
Failure to call quit will leave extra background processes and ports running on your machine which could cause you problems later.
Some test frameworks offer methods and annotations which you can hook into to tear down at the end of a test.
If not running WebDriver in a test context, you may consider using try / finally which is offered by most languages so that an exception will still clean up the WebDriver session.
Python’s WebDriver now supports the python context manager, which when using the with keyword can automatically quit the driver at the end of execution.
Window management
Screen resolution can impact how your web application renders, so WebDriver provides mechanisms for moving and resizing the browser window.
In my batch execution, multiple browsers with multiple tabs are getting opened for first scenario. I wanted to close all these browsers before starting second scenario.
Driver.close() is just closing one tab of the browser. Driver.quit() is closing all the browsers and also ending the WebDriver session. So , am unable to run the batch execution. Please provide a solution for this.
4 Answers 4
You should understand difference between driver.close() and driver.quit()
driver.close() and driver.quit() are two different methods for closing the browser session in Selenium WebDriver . Understanding both of them and knowing when to use which method is important in your test execution.
driver.close() – It closes the the browser window on which the focus is set.
driver.quit() – It basically calls driver.dispose method which in turn closes all the browser windows and ends the WebDriver session gracefully.
You should use driver.quit() whenever you want to end the program. It will close all opened browser window and terminates the WebDriver session. If you do not use driver.quit at the end of program, WebDriver session will not close properly and files would not be cleared off memory. This may result in memory leak errors.
In your case you have to use driver.close() which will close current window and keeps driver active.
Just to add - if there is only browser window open and you use driver.close() , it will quit the webdriver session. The webdriver will not stay active.
The below explanation should explain the difference between driver.close and driver.quit methods in WebDriver. I hope you find it useful.
driver.close and driver.quit are two different methods for closing the browser session in Selenium WebDriver.
Understanding both of them and knowing when to use each method is important in your test execution. Therefore, I have tried to shed some light on both of these methods.
driver.close - This method closes the browser window on which the focus is set. driver.quit close the session of webdriver while driver.close only close the current window on which selenium control is present but webdriver session not close yet, if no other window open and you call driver.close then it also close the session of webdriver.
driver.quit – This method basically calls driver.dispose a now internal method which in turn closes all of the browser windows and ends the WebDriver session gracefully.
driver.dispose - As mentioned previously, is an internal method of WebDriver which has been silently dropped according to another answer - Verification needed. This method really doesn't have a use-case in a normal test workflow as either of the previous methods should work for most use cases.
Explanation use case: You should use driver.quit whenever you want to end the program. It will close all opened browser windows and terminates the WebDriver session. If you do not use driver.quit at the end of the program, the WebDriver session will not close properly and files would not be cleared from memory. This may result in memory leak errors.
Now In that case you need to specific browser. Below is code which will close all the child windows except the Main window.
Now here you need to modify or add the condition according to your need
Currently it is checking only if home window is equal to childwindow or not. Here you need to specify the condition like which id's you want to close. I never tried it so just suggested you the way to achive your requirement.
Selenium is used for automation testing of web applications. In this case, web applications refer to software that makes it necessary to instantiate a browser instance, open a browser and then close a browser when the testing is complete. During testing cycles, this entire process can be automated by Selenium WebDriver.
This article will focus on how to close a browser in Selenium.
What is Selenium?
To explore the basics of Selenium and its usage in testing, refer to this page.
Before proceeding with this, it is important to know how to execute your first test case in Selenium to understand the flow and operation.
How to Close a Browser in Selenium
To close a browser using Selenium, simply use the close() method. Refer to the code below as an example:
Now let’s understand a bit more about driver.close and driver.quit methods which are used to close a browser in Selenium.
driver.close() and driver.quit() are two methods for closing a browser session in Selenium WebDriver. It is necessary to know when to use each method in a test script.
- driver.close() closes only the current window on which Selenium is running automated tests. The WebDriver session, however, remains active.
- On the other hand, the driver.quit() method closes all browser windows and ends the WebDriver session.
Note that if no other window is open and the script calls driver.close() then it will also close the current WebDriver session.
Here arises the question: when should a tester use which method?
Let’s take an example to understand how to call both these methods in Selenium.
driver.close()
This method is used when you want to close the current existing window you are working on. Please note driver.close() will not terminate the browser instance.
On executing the above code, output goes as follows:
driver.quit()
This method is used when you want to terminate the webdriver instance window you are working on. Please note driver.quit() will terminate the browser instance.
Bear in mind that Selenium tests must be run on real devices for accurate results. Start running tests on 2000+ real browsers and devices on BrowserStack’s real device cloud. Run parallel tests on a Cloud Selenium Grid to get faster results without compromising on accuracy. Detect bugs before users do by testing software in real user conditions with BrowserStack.
В этой серии руководств мы узнаем обо всех исчерпывающих командах selenium webdriver, начиная с самых простых команд selenium и заканчивая расширенными командами Selenium webdriver в следующем порядке статей:
Команды Selenium webdriver
Selenium -Tutorial: Список тем
Архитектура Selenium WebDriver - подробности
Работа с различными браузерами в Selenium
Команды Advance и Critical Selenium
Все о классе действий в Selenium и исчерпывающем использовании
Все 12 критических методов исполнителя JavaScript в Selenium
71 Вопросы на собеседовании по Selenium, на которые не давали правильного ответа
Интеграция Selenium с Perfecto
Основные команды Selenium Webdriver -Вопросы:
Промежуточный селен вебдрайвер команды -Вопросов:
- Выпадающий список селен
- Перетащить в селен / класс действий в селен / как перетащить в селен
- Мышь парит в селене
- Оповещения в селене / как обрабатывать оповещения в селене / как обрабатывать всплывающие окна в селене
- Класс действий в селене / действия в селене
- Javascriptexecutor / javascriptexecutor в селене
- Прокрутка вниз в селене / прокрутка в селене / как прокрутка в селене / прокрутка вверх в селене / страница вниз в селене / прокрутка страницы в селене / прокрутка в селене webdriver
- Скриншот в селене
Расширенные команды Selenium WebDriver -Вопросов:
- Щелкните правой кнопкой мыши в селене
- Contextclick в селене
- Двойной щелчок по селену
- клавиши клавиатуры в selenium webdriver
- Всплывающая подсказка селеном
- Селен нажмите и удерживайте
Основные команды Selenium - Ответы:
Selenium перейдите по URL-адресу:
В Selenium Webdriver, если мы хотим перемещаться или открывать какой-либо конкретный URL-адрес через наш браузер, мы можем сделать это в основном двумя разными подходами: один - с помощью метода get (), а другой - с помощью навигации, мы рассмотрим, как это может быть сделанный :
Как внутри Selenium работает метод get:
Как только этот метод get () будет вызван из вашего тестового сценария, тогда ссылка на Webdriver, то есть драйвер будет ждать, пока страница загрузится, на самом деле метод get () запускается изнутри. функция загрузки который возвращает дескриптор ссылки на ваш драйвер после полной загрузки страницы.
Selenium перейти вперед и вернуться назад:
Другой подход к переходу по URL-адресу с историей браузера заключается в использовании метода navigate (), при котором Selenium использует историю браузера для перехода вперед или назад с соответствующими URL-адресами, такими как:
Селен перейти вперед
Селен перейти назад:
Мы можем использовать метод refresh () из Selenium navigate
Селен нажмите
Чтобы выполнить любую операцию щелчка с помощью Selenium click, мы должны использовать метод, называемый click (), в подходе ниже, есть другие способы выполнить операцию щелчка на любом из WebElement в Selenium, то есть с помощью JavaScriptClick, который иногда очень полезен в зависимости от ситуаций где ваш обычный метод щелчка Selenium работает очень стабильно, в некоторых случаях, если вы автоматизируете с помощью браузера IE, и если тестируемое веб-приложение построено в какой-то загрузочной JS, тогда обычный метод щелчка selenium может когда-нибудь не работать , в этом случае вы можете использовать метод щелчка Javascript.
Вы можете передать элемент, используя различные стратегии локатора (например, xpath, name, css и т.д.) в методе findElement (), а затем выполнить операцию метода click (), как указано выше.
Ключи отправки Selenium
Когда нам нужно ввести текст в какое-либо текстовое поле через Selenium, мы используем метод Selenium sendkeys (), передавая «Текст для ввода» в качестве параметра в методе sendKeys («Текст для ввода») и аналогично метод click () этот метод также применяется к любому webElement (здесь веб-текстовое поле), поэтому мы должны использовать driver.findElement для отправки текста в этот TextBox.
Пример кода выглядит следующим образом:
Текстовое поле Selenium
Если мы хотим очистить какие-либо данные из ранее заполненного текстового поля, мы можем использовать метод под названием clear (), а также с помощью класса ключей в Selenium мы можем это сделать, с помощью которого мы можем выполнять операции с клавиатурой напрямую вместе с сочетаниями клавиш :
Чтобы очистить данные с помощью метода clear (), мы можем написать следующий подход:
Используя класс Keys, мы также можем очистить текстовые поля следующим образом.
Максимальное окно селеном
При работе с автоматизацией браузера, если нам нужно развернуть окно в Selenium, мы могли бы использовать следующие подходы:
- Используя метод maximize ()
- Если это ChromeBrowser, мы также можем использовать ChromeOptions и добавив аргумент «start-maximized» вместе с ChromeOptions.
Selenium Maximize Window с помощью метода Maximize ():
Selenium Maximize Window с помощью ChromeOptions для ChromeBrowser:
Используя приведенный ниже метод, мы устанавливаем экземпляр браузера Chrome для Webdriver в развернутом режиме, и возвращаемый сеанс драйвера будет продолжать использовать ту же функцию (т.е. развернуть окно) для дальнейшей работы в Интернете согласно сценарию.
Окно сворачивания Selenium
Мы можем минимизировать окно, используя команду Selenium minim () со следующим подходом:
Selenium закрыть браузер:
Чтобы закрыть браузер в Selenium, мы используем метод close () в следующем подходе:
Selenium закрыть браузер
Чтобы закрыть все экземпляры браузера в Selenium, мы используем метод quit () в следующем подходе:
Разница между driver.close () и driver.quit () в Selenium:
- driver.close () закрывает только окно браузера, в котором находится текущий фокус экземпляров webdriver, а с другой стороны, driver.quit () закрывает все окна браузера, которые связаны с текущим сеансом браузеров.
- Внутри driver.quit () вызывает метод с именем driver.dispose ().
Промежуточные команды веб-драйвера Selenium - ответы:
Выпадающий список селен :
В структуре DOM веб-страницы раскрывающийся список реализуется с помощью Select или input Tage of HTML. Для работы с Dropdown с Selenium и выполнения определенных
веб-операций в раскрывающихся списках, нам нужно использовать класс «Select» из Selenium WebDrivers API как часть «org.openqa.selenium.support.ui»Из Selenium WebDriver.
При работе с Selection of DropDown в Selenium есть 2 разных постановки задачи или вопроса:
- Выбор одного элемента в раскрывающемся списке за раз
- Выбор нескольких элементов в раскрывающемся списке за раз.
Выбор одного элемента в раскрывающемся списке за раз
В следующем подходе мы можем работать с Dropdown:
Шаг первый :
Вы должны создать дескриптор для DropDown WebElement, используя создание объекта класса Select следующим образом:
Выбрать выбрать = новый Выбрать (WebElement webelement);
Шаг второй :
Существует 3 разных подхода для выбора значения из раскрывающегося списка в Selenium, мы могли бы использовать любой из следующих методов, чтобы выбрать значение из раскрывающегося списка в Selenium:
- selectByVisibleText
- selectByIndex
- выберите по значению
Вот нижеприведенный подход, который мы можем использовать для выбора значения из раскрывающегося списка:
Выпадающий список в селене - подход один:
В первом подходе вы можете использовать текст, который виден желаемого выбора Webelement.В приведенном выше методе вы можете передать указатель раскрывающегося списка и видимый текст, который вы хотите выбрать из раскрывающегося списка, после чего он выполнит желаемую операцию - Выбор ожидаемого раскрывающегося элемента.
Выпадающий список в селене - подход второй:
В этом подходе вы выбираете Webelement с помощью атрибута value желаемого выбора WebElement из раскрывающегося списка:
В указанном выше методе вы можете передать указатель раскрывающегося списка и атрибут значения WebElement, который вы хотите выбрать из раскрывающегося списка, после чего он выполнит желаемую операцию - Выбор ожидаемого раскрывающегося элемента.
Выпадающий список селен - подход третий:
В этом подходе вы выбираете Webelement, используя индекс (порядок WebElement в теге выбора HTML) желаемого выбора WebElement из раскрывающегося списка, индекс обычно начинается с 0:
В указанном выше методе вы можете передать указатель раскрывающегося списка и индекс / порядок WebElement (в теге выбора раскрывающегося списка), который вы хотите выбрать из раскрывающегося списка, после чего он выполнит желаемую операцию: Выбор ожидаемого раскрывающегося элемента .
Выбор нескольких элементов в раскрывающемся списке за раз
От структуры и реализации HTML DOM зависит, разрешено ли любому раскрывающемуся элементу иметь множественный выбор элементов. Чтобы выбрать несколько элементов в Selenium, мы должны выполнить следующие два шага:
Шаг первый : Проверьте, разрешает ли DropDown WebElement множественный выбор, используя метод isMultiple (), это возвращает логическое значение true или false.
Шаг второй : если вышеупомянутый шаг возвращает истину, то раскрывающийся список позволяет множественный выбор. И после этого мы можем использовать вышеупомянутый любой / все три различных подхода для выбора нескольких значений и выполнения любых желаемых операций.
Итак, в заключение ниже приведен пример кода:
Перетащите селен :
В этом разделе учебника мы изучим все различные подходы к выполнению перетаскивания в Selenium, такие как:
- Перетащите в Selenium с помощью метода build ().
- Перетащите в Selenium с помощью метода dragAndDrop ().
- Перетащите в Selenium с помощью метода dragAndDropBy ().
Что такое перетаскивание в Selenium и где оно используется:
Перетаскивание - это особая операция, когда пользователи переходят к вашим веб-приложениям и пытаются выполнить операцию (перетаскивание мышью) на каком-либо веб-элементе, который может свободно перемещаться по приложению и может быть отброшен в другом месте веб-страницы этого приложения.
Здесь перетаскиваемый элемент называется Source WebElement, а элемент, из которого он удаляется, называется Destination WebElement.
Чтобы выполнить описанные выше сценарии с помощью автоматизации с помощью Selenium, нам нужно перетащить функции, предоставляемые Selenium.
Различные подходы к перетаскиванию в Selenium:
Перетащите в Selenium с помощью метода Build ():
Как работает метод Build () внутри :
build () из класса Actions в Selenium, который является частью пакета org.openqa.selenium.interactions внутренне генерирует составные действия
путем объединения всех действий, которые были вызваны или запущены перед вызовом метода build ().
Вышеупомянутый оператор для выполнения сборки операции перетаскивания используется для привязки предыдущих действий, таких как clickAndHold, moveToElement и методы выпуска.
Вот фрагмент кода ниже для выполнения перетаскивания в Selenium с использованием метода сборки класса Actions:
Перетащите в Selenium с помощью метода dragAndDrop ():
Как работает метод dragAndDrop ():
Метод dragAndDrop (sourceWebElement, destinationWebElement) в основном принимает два аргумента: один - источник, а другой - целевой веб-элемент.
dragAndDrop устраняет необходимость clickAndHold, moveToElement, release в классе Action, он внутренне обрабатывает все сценарии, которые выполняются этими методами.Вот фрагмент кода ниже для выполнения dragAndDrop с методом dragAndDrop:
Перетащите в Selenium с помощью метода dragAndDropBy ():
Как работает метод dragAndDropBy (источник WebElement, int xOffset, int yOffset):
Метод dragAndDropBy () принимает 3 аргумента:
Source WebElement: элемент, который перетаскивается, то есть исходный элемент
xOffset: смещение горизонтального перемещения места назначения
yOffset: смещение вертикального перемещения места назначения
Внутренне этот метод берет исходный веб-элемент, перемещает его и отпускает в место назначения. Этот метод полезен, если вы хотите переместить любой исходный веб-элемент в любые местоположения пикселей.
Ниже приведен фрагмент кода для DragAndDropBy в Selenium:
Посетите здесь, чтобы ознакомиться с остальными расширенными наборами команд Intermediate Selenium webdriver.
Расширенные команды Selenium WebDriver -Ответы:
Двойной щелчок по селену :
Чтобы воспроизвести операцию, то есть двойной щелчок в Selenium с помощью мыши, нам нужно выполнить двойной щелчок через класс Actions в Selenium, и мы можем сделать это следующим образом:
Приведенный выше фрагмент кода - это метод, который в основном принимает аргумент как Locator, то есть WebElement, на котором должен быть выполнен двойной щелчок.
Contextclick в селене:
Чтобы воспроизвести контекстный щелчок или операцию щелчка правой кнопкой мыши с помощью мыши, нам нужно выполнить метод контекстного щелчка через класс Actions в Selenium, и мы можем сделать это следующим образом:
Подробные сведения о командах веб-драйвера Advance Selenium см. здесь. Также, чтобы получить представление о Класс действий в Selenium и его реализации посетите здесь.
Критические часто задаваемые вопросы:
Что такое manage () в Selenium?
driver.manage () возвращает ссылку на реализацию WebDriver.Options Interface.Options interface - это интерфейс для управления и обработки действий в меню браузера, таких как:
Вывод:
В этом разделе учебника мы рассмотрели основные Селен веб-драйвер команд, нажмите здесь, чтобы узнать Промежуточные и расширенные команды веб-драйвера Selenium. Чтобы изучить Selenium с нуля, нажмите здесь.
Читайте также: