Selenium развернуть окно браузера python

Обновлено: 07.07.2024

Представляю перевод неофициальной документации Selenium для Python.
Перевод сделан с разрешения автора Baiju Muthukadan.
Оригинал можно найти здесь.

Предисловие от автора статьи

Selenium WebDriver – это программная библиотека для управления браузерами. WebDriver представляет собой драйверы для различных браузеров и клиентские библиотеки на разных языках программирования, предназначенные для управления этими драйверами.

По сути своей использование такого веб-драйвера сводится к созданию бота, выполняющего всю ручную работу с браузером автоматизированно.

Чаще всего Selenium WebDriver используется для тестирования функционала веб-сайтов/веб-ориентированных приложений. Автоматизированное тестирование удобно, потому что позволяет многократно запускать повторяющиеся тесты. Регрессионное тестирование, то есть, проверка, что старый код не перестал работать правильно после внесения новых изменений, является типичным примером, когда необходима автоматизация. WebDriver предоставляет все необходимые методы, обеспечивает высокую скорость теста и гарантирует корректность проверки (поскольку человеский фактор исключен). В официальной документации Selenium приводятся следующие плюсы автоматизированного тестирования веб-приложений:

  • возможность проводить чаще регрессионное тестирование;
  • быстрое предоставление разработчикам отчета о состоянии продукта;
  • получение потенциально бесконечного числа прогонов тестов;
  • обеспечение поддержки Agile и экстремальным методам разработки;
  • сохранение строгой документации тестов;
  • обнаружение ошибок, которые были пропущены на стадии ручного тестирования.

Также одной из незаменимых особенностей Selenium WebDriver является ожидание загрузки страницы. Сюда можно отнести случаи, когда парсинг данных на странице невозможен из-за страниц перенаправления или ожидания, содержащих примерно такой текст: «Подождите, страница загружается». Такие страницы, само собой разумеется, не является целью парсинга, однако обойти их часто не представляется возможным. Естественно, без Selenium WebDriver. Selenium WebDriver позволяет в таких случаях «ожидать», как ожидал бы человек, пока на странице, к примеру, не появится элемент с необходимым именем.

Еще один плюс Selenium заключен в том, что действия веб-драйвера видимы визуально и требуют минимального времени нахождения на странице, это позволяет с удобством демонстрировать функционал сайта, когда необходима презентация сервиса.

Некоторые проблемы WebDriver (из сети и личного опыта):

  • бывает, что поведение отличается в разных браузерах;
  • иногда возникают сложности с поиском элементов (XPath и другие методы иногда просто не работают, хотя должны);
  • необъяснимые падения драйвера прямо посреди теста;
  • взаимодействие возможно только с первой вкладкой браузера, драйвер позволяет открывать новые вкладки и новые окна, но не позволяет в них работать;
  • необходимо четко продумывать архитектуру теста, часто использовать assert или ожидания, чтобы тест умел «думать», когда делать и когда нет.

Содержание:

1.1. Введение

Привязка Selenium к Python предоставляет собой простой API [Интерфейс программирования приложений (англ. Application Programming Interface) — Прим. пер.] для написания тестов функциональности/тестов соответствия требованиям с использованием веб-драйвера Selenium WebDriver. С помощью Selenium Python API вы можете интуитивно просто получить доступ ко всему функционалу Selenium WebDriver.

Привязка Python-Selenium предоставляет удобный API для доступа к таким веб-драйверам Selenium как Firefox, Ie, Chrome, Remote и других. На данный момент поддерживаются версии Python 2.7, 3.2, 3.3 и 3.4.

В данной документации рассмотрен Selenium 2 WebDriver API. Selenium 1 / Selenium RC API в ней не охвачены.

1.2. Загрузка Selenium для Python


Вы можете загрузить привязку Selenium к Python со страницы пакета selenium на PyPI. Однако, лучшим способом будет использование модуля pip. Python 3.4 содержит pip в стандартной библиотеке. Используя pip, вы можете установить selenium следующей командой:

Для создания изолированной среды Python вы можете использовать virtualenv. Также библиотека Python 3.4 содержит модуль pyvenv, который практически аналогичен virtualenv.

1.3. Подробная инструкция для пользователей Windows

Примечание
Для данной инсталляции вам необходим доступ к сети Интернет.
Теперь вы можете запускать свои тестовые скрипты, используя Python. К примеру, если вы создали скрипт на основе Selenium и сохранили его в C:\my_selenium_script.py, то вы можете запустить его следующей командой:

1.4. Загрузка Selenium server

Примечание
Selenium server необходим в случаях, когда вы хотите использовать remote WebDriver [удаленный — Прим. пер.]. За дополнительной информацией обращайтесь к разделу Использование Selenium с remote WebDriver. Если вы только начинаете изучать Selenium, вы можете пропустить этот раздел и продолжить изучение со следующей главы.

Selenium server написан на языке Java. Для его запуска рекомендована среда Java Runtime Environment (JRE) версии 1.6 или выше.

Вы можете скачать Selenium server 2.x на странице загрузок сайта selenium. Имя файла должно выглядеть примерно таким образом: selenium-server-standalone-2.x.x.jar. Вы всегда можете загрузить последнюю версию Selenium server 2.x.

Если Java Runtime Environment (JRE) не установлена в вашей системе, вы можете скачать JRE с сайта Oracle. Если вы используете системы GNU/Linux и имеете права root [права администратора — Прим. пер.], вы так же можете установить JRE, используя инструкции вашей системы.

Если команда java доступна в PATH (переменная окружения), вы можете запустить Selenium server используя следующую команду:

Замените 2.x.x актуальной версией Selenium server, скачанной вами с сайта.

Если JRE установлена под пользователем, не обладающим правами root и/или если она недоступна в переменной окружения PATH, вы можете ввести относительный или полный путь до файла java. Аналогично, вы можете дополнить имя jar-файла Selenium server до относительного или полного пути. После этого команда будет выглядеть так:

Я пытаюсь увеличить и уменьшить масштаб Chrome (selenium webdriver) только с помощью клавиатуры. Я пытался .

но это не работает. Нужен ответ в python.

Я просто боролся с этим. Мне удалось найти то, что работает для меня, надеюсь, это работает для вас:

У 'масштаб' = какой масштаб вы хотите. (например, '67%')

  • селен 3.6.0
  • chromedriver 2.33
  • версия Chrome 62.0.3202.75 (официальная сборка) (64-разрядная версия)
  • macOS Sierra 10.12.6

Я пробовал способы (без использования CSS), которые люди предлагали в других вопросах в прошлом. Например, ответы на этот вопрос: Selenium webdriver увеличить/уменьшить содержимое страницы.

Итак, я подумал: если не с помощью ярлыков, что может быть другим способом сделать это?

идея состоит в том, чтобы использовать страницу" chrome://settings/", чтобы изменить масштаб:

enter image description here

хорошо, я знаю, например, из переход через Chrome: / / настройки по Selenium, что все настройки должны быть установлены в ChromeOptions.

С этот вопрос я заметил, что в список предпочтений единственный параметр (я думаю) может быть:

Я пытался, но безуспешно.

Я хочу повторить, что я знаю, что это не правильный подход (и это будет отличаться с разными версиями браузера), но он работает и, по крайней мере, был полезен для меня, чтобы понять, как войти в корневой элемент тени с селен.

следующий метод возвращает элементы внутри теневого корня:

это полезно, потому что в chrome://settings/ страница есть теневые корневые элементы.

чтобы сделать это, в моем браузере это путь:

enter image description here

enter image description here

enter image description here

EDIT

As предложил by @Florent B в комментариях, мы можем получить тот же результат прост с:

Selenium WebDriver является преемником Selenium RC

Обходным решением будет использование JavascriptExector следующим образом:

Две вещи: 1) Если вы заботитесь о том, что видно, вы, вероятно, захотите переместить окно в исходное положение, прежде чем сделать его полноэкранным. 2) Если размеры экрана являются переменными, вы можете получить их во время выполнения с помощью screen объекта javascript. Принимая во внимание эти моменты, JavaScript, вероятно, должен быть: window.moveTo(0,0); window.resizeTo(screen.width, screen.height); Обратите внимание, что существует проблема с перемещением окна в (0,0) в Firefox на Mac. Кажется, он не учитывает свой регион заголовка должным образом. Перемещение окна в (0,1), кажется, фактически перемещает его в (0,0), поэтому одна ошибка помогает другой. В этот момент вы можете развернуть окно правильно. Должен быть экземпляр JavascriptExecutor IJavaScriptExecutor

Это работает для IE и Firefox. Chrome не работает. В проекте ChromeDriver присутствует ошибка.

Между тем, обойти хром - это реализовать то, что предложили Джои В. и Кодер323.

Этот способ для Firefox - единственный, который работает, javascript не делает ничего на селене 2.21. Для чувствительной к регистру Java => driver.manage (). Window (). Maximize (); Что ж. Я скажу спасибо :) это работает на моем хромедривере. Я использую FF53 с Selenium WebDriver 3.3.0. . Driver.Manage () Window.Maximize (); работает для меня

Для IE и Firefox:

. Driver.manage () окно () максимального (). работает и для хрома К сожалению это бросает и исключение для ChromeDriver. Работает нормально для IE и Firefox, хотя.

Развернуть браузер с помощью Java:

Другой способ сделать с Java:

Это не работает в случае контейнера Chrome Docker с ошибкой java.awt.HeadlessException в sun.awt.HeadlessToolkit.getScreenSize (HeadlessToolkit.java:284). Вы сталкивались с этой проблемой раньше? Это сработало для меня, но мне пришлось добавить driver.manage().window().setPosition(new Point(0,0)); до последней строки или окна не будет в правильном положении.

Если вы используете драйвер Chrome, вы можете установить возможности

Для меня работал следующий фрагмент кода Selenium Java:

Он будет работать в IE, Mozilla, Chrome

Как я могу установить то же самое для AndroidDriver ();

Просто используйте команду Window.Maximize()

Мы наблюдали ошибку с новыми библиотеками драйверов. Вы можете использовать немного старые банки, которые могут обрабатывать новые версии браузеров.

Основной общий вариант: -

Вы также можете использовать другую опцию для максимизации окна браузера.

Добавьте параметр ниже и передайте его драйверу: -

Полный код будет выглядеть следующим образом: -

Попробуйте это на сафари: -

Вы можете использовать Selenium Emulation в WebDriver:

Нижняя строка кода максимизирует IE, Chrome и Mozilla

Итак, это обходное решение в основном использует "ALT + SPACE", чтобы вызвать меню действий браузера, чтобы выбрать "MAXIMIZE" из параметров и нажимать "ENTER"

Эта опция подходит для меня:

Эта опция работает на всех ОС.

Для Webdriverjs (node.js) следующее окно улучшает хромированное окно.

Я использовал это решение

=== > также добавьте ссылку на сборку .NET "System.Windows.Forms"

Существует функция, которую вы можете использовать для максимизации окна в Python, который является window_maximize(). И вот как я его использую. Надеюсь, это поможет -

Драйвер Chrome уже поддерживает:

Протокол хром-дайвера обеспечивает способ максимизации окна:

но эта команда не используется в selenium-java. Это означает, что вы также отправляете команду chrome самостоятельно. Как только я это сделал, он работает.

Продолжение перевода неофициальной документации 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 — это словарь. Вместо того, чтобы использовать словари по умолчанию, вы можете явно прописать значения:

Продолжение перевода неофициальной документации Selenium для Python.
Перевод сделан с разрешения автора Baiju Muthukadan.
Оригинал можно найти здесь.

Содержание:

Предположительно, первое, что вы захотите сделать с помощью WebDriver, будет переход по ссылке. Обычно для таких целей используют метод get:


Метод driver.get перенаправляет к странице URL, поданной в параметре. WebDriver будет ждать пока страница не загрузится полностью (то есть, событие “onload” игнорируется), прежде чем передать контроль вашему тесту или скрипту. Стоит отметить, что если страница использует много AJAX-кода при загрузке, то WebDriver может не распознать, загрузилась ли она полностью. Если необходимо гарантировать полную загрузку страниц, вы можете использовать ожидания (англ. waits).

3.1. Взаимодействие со страницей

Сама по себе возможность переходить по ссылке не так уж полезна. Что действительно хочется сделать, так это взаимодействовать со страницей, или, если быть точным, с элементами HTML на странице. Прежде всего необходимо найти их. WebDriver предоставляет ряд способов для поиска элементов. К примеру, на странице есть элемент, определенный таким образом:


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


Также вы можете искать адрес гиперссылки по тексту гиперссылки, но будьте бдительны: текст должен совпадать в точности. Также будьте внимательны при использовании XPATH в WebDriver. Если существует больше одного элемента, удовлетворяющего условиям запроса, вернется только первый найденный. Если ничего не будет найдено, будет возбуждено исключение NoSuchElementException.

Итак, мы получили элемент. Что вы можете с ним сделать? Первым делом вы захотите ввести какой-нибудь текст в текстовое поле:


Также вы можете имитировать нажатие клавиш-стрелок клавиатуры с помощью класса “Keys”:


Метод send_keys можно вызвать для любого элемента, который позволяет проверить сочетания клавиш, такие как те, что используются в GMail. Существует побочный эффект, заключающийся в том, что ввод в текстовое поле не очищает его автоматически. Вместо этого то, что вы набираете на клавиатуре, будет дописываться к уже вписанному в поле. Очистить содержимое тектового поля или текстовой области textarea легко — с помощью метода clear:

3.2. Заполнение форм

Мы уже рассмотрели ввод текста в текстовую область или текстовое поле, а как быть с другими элементами? Вы можете попробовать раскрыть раскрывающийся список, после чего можно использовать “setSelected” для выделения тэгов вроде OPTION. Работать с тэгами SELECT не так уж сложно:


Такой код найдет первый элемент “SELECT” на странице, и в цикле пройдет по всем тэгам OPTION поочередно, сообщая их значения и поочередно выделяя их.

Как можно заметить, это не самый быстрый способ работы с элементами SELECT. Поддерживаемые вебдрайвером классы содержат один, называющийся “Select”, он предоставляет более удобные способы взаимодействия:


Также WebDriver предоставляет возможность снятия выделения со всех элементов выпадающего списка:


Этот код снимает выделение со всех тегов OPTION первого тега SELECT на странице.

Допустим, для теста вам необходим список всех выделенных по умолчанию опций. Класс Select предоставляет такое свойство (возвращает список):


Для получения всех доступных опций используйте:


В качестве альтернативы первому методу можно использовать метод “submit”, доступный для каждого элемента. Если вызвать его для элемента внутри формы, WebDriver пробежится по всей структуре DOM, пока не найдет закрывающийся тег формы, и затем вызовет для нее submit. Если элемент находится не в форме, тогда возбудится исключение NoSuchElementException:

3.3. Перетаскивание

Есть два варианта «перетаскивания» элементов: перемещение элемента на определенную величину, либо перетаскивание его на другой элемент:

3.4. Переключение между окнами и фрэймами

Современные веб-приложения редко обходятся без фреймов (frame) и редко когда ограничиваются одним окном. WebDriver поддерживает переключение между именованными окнами с помощью метода “switch_to_window”:


Все вызовы, начинающиеся с driver теперь будут истолкованы как обращенные к полученному окну. Но откуда вам знать имя окна? Взгляните на код javascript или ссылку, которые открывают окно:


Также вы можете послать “дескриптор окна” методу “switch_to_window()”. Пользуясь этой особенностью, вы можете использовать цикл для перебора всех открытых окон, к примеру, так:


Еще вы можете переходить между фрэймами (frame или iframes):


Можно получить доступ к подчиненным фреймам, подавая путь, разделяемый точкой, или можно получить фрейм по индексу:


Следующий код перенаправит к фрейму с именем “child”, который в свою очередь принадлежит первому подчиненному фрейму фрейма “frameName”. Пути к фреймам описываются полностью — от верхнего уровня:


Когда работа с фреймами будет завершена, необходимо переключиться обратно, к главному фрейму, что может быть сделано следующим образом:

3.5. Всплывающие окна

Selenium WebDriver из упаковки поддерживает управление всплывающими диалоговыми окнами. После того как вы инициируете запуск, откроется окно, управлять им можно так:


Код вернет объект текущего открытого окна. С этим объектом вы можете принять, отклонить вопрос окна, прочитать его содержимое или даже ввести текст по приглашению окна. Интерфейс взаимодействия со всплывающими окнами работает одинаково хорошо как для предупреждений (alerts), так и для запросов к подтверждению (confirms) и приглашений к вводу (prompts). За дополнительной информацией обратитесь к документации API.

3.6. Навигация: история и локация


Чтобы перейти вперед или назад по истории вкладки:


Имейте в виду, что этот функционал полностью зависит от используемого драйвера. Вы можете получить непредвиденный результат, если привыкли к поведению какого-либо конкретного браузера, а работаете с другим.

Прежде, чем мы завершим эту главу, вам возможно будет интересно узнать как использовать куки. Прежде всего, вам необходим домен, использующий куки:

Читайте также: