Браузер находится под удаленным управлением selenium

Обновлено: 02.07.2024

Selenium — это набор программ с открытым исходным кодом, которые применяют для тестирования веб-приложений и администрирования сайтов локально и в сети. Программы Selenium позволяют автоматизировать действия браузера. Среди программ проекта:

  • Selenium IDE — плагин для браузера Firefoх для записи действий пользователя.
  • Selenium RC — устаревшая библиотека для управления браузерами.
  • Selenium WebDriver — библиотека для управления браузерами.
  • Selenium Grid — кластер Selenium-серверов для управления браузерами на разных компьютерах в сети.
  • Selenium Server — сервер для управления браузером удаленно по сети.

Selenium IDE

Selenium IDE — плагин для браузера Firefoх для записи действий пользователя (тестировщика) и их воспроизведения для тестирования. Является библиотекой Selenium с графическим интерфейсом и возможностями для работы со сценариями тестирования веб-страниц. IDE генерирует код для Selenium RC или Selenium WebDriver, который повторяет записанные действия пользователей.

Selenium RC

Selenium RC (Remote Control) — предыдущий основной продукт Selenium до появления WebDriver в 2007 году. Программа, называемая также Selenium 1.0, являлась средством удаленного управления браузером, но по функциональности сильно уступала WebDriver (Selenium 2.0). Selenium RC продолжает поставляться в дистрибутиве WebDriver, но продукт не развивается — при необходимости сложных тестов вне ограничений первой версии пользователям предлагают воспользоваться второй.

Selenium WebDriver

WebDriver напрямую отправляет команды браузеру, используя его API и получает результаты тестирования. В предыдущей версии Selenium RC принцип работы был другим — программа внедряла код на языке JavaScript в браузер для управления им. WebDriver же использует способ взаимодействия с браузером, максимально близкий к действиям обычного пользователя.

Тестировщик ПО на Java

Освойте ручное и автоматизированное тестирование и получите IT-профессию, даже не имея технического образования. Дополнительная скидка 5% по промокоду BLOG.

Selenium Grid

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

Преимущества Selenium

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

Selenium WebDriver — гибкий инструмент тестирования, который можно легко интегрировать с разными тестовыми фреймворками и другими инструментами тестирования. Это позволяет расширить инструментарий тестировщика и применять его для узких задач, например web crawling и тестирования производительности.

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

Недостатки Selenium

В программах Selenium можно тестировать только веб-приложения, функций тестирования сетевых и десктопных приложений в комплекте нет. Также для работы с Selenium нужно владеть продвинутыми навыками программирования и написания скриптов. Новички в тестировании могут пользоваться более простыми аналогами Selenium, например Katalon Studio или UFT.

Быстрый вход в IT без технического образования — за 4 месяца вы на практике поймете основы веб-разработки, научитесь работать с баг-трекерами, тестировать приложения и API, составлять SQl-запросы.

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


Для браузера Firefox загружаем драйвер geckodriver для своей версии ОС и прописываем путь к нему в переменной окружения PATH .

Пробуем управлять браузером удаленно:


Объект WebDriver имеет большое количество методов, предназначенных для поиска элементов на странице. Эти методы можно поделить на две группы: find_element_*() и find_elements_*() . Методы первой группы возвращают одиночный объект WebElement , который представляет первый из найденных на странице элементов. Методы второй группы возвращают список объектов WebElement , соответствующих запросу.

  • find_element_by_id() — элемент с указанным id
  • find_element_by_name() — элемент с указанным значением атрибута name
  • find_element_by_tag_name() — элемент с указанным именем тега
  • find_element_by_class_name() — элемент с указанным CSS-классом
  • find_element_by_css_selector() — элемент с указанным CSS-селектором
  • find_element_by_link_text() — элемент <a> с указанным текстом
  • find_element_by_partial_link_text() — элемент <a> , содержащий указанный текст
  • find_elements_by_name() — элементы с указанным значением атрибута name
  • find_elements_by_tag_name() — элементы с указанным именем тега
  • find_elements_by_class_name() — элементы с указанным CSS-классом
  • find_elements_by_css_selector() — элементы с указанным CSS-селектором
  • find_elements_by_link_text() — элементы <a> с указанным текстом
  • find_elements_by_partial_link_text() — элементы <a> , содержащие указанный текст

Находим поля «Имя пользователя» и «Пароль»:

Свойства и методы объекта WebElement :

  • tag_name — имя тега
  • get_attribute() — значение атрибута с указанным именем
  • text — текст, содержащийся в элементе
  • clear() — удаляет текст, введенный в текстовое поле
  • is_displayed() — возвращает True , если элемент видимый и False в противном случае
  • is_enabled() — возвращает True для элемента ввода, если элемент активизирован и False в противном случае
  • is_selected() — возвращает True для checkbox , если элемент выбран и False в противном случае
  • location — словарь с ключами x и y позиции элемента на странице

Клик на элементе страницы

Объект WebElement имеет метод click() , имитирующий клик мышкой на элементе. Этот метод можно использовать для перехода по ссылке, для отправки данных формы или инициирования любого другого действия, которое может быть запущено кликом на элементе.

Заполнение и отправка формы

Для отправки данных формы:

  • находим нужные поля <input>
  • заполняем их, используя метод send_keys()
  • вызываем метод submit() для любого элемента формы или метод click() для кнопки Submit


Отправка кодов специальных клавиш

Selenium включает модуль для отправки в браузер нажатий специальных клавиш: Up, Down, Left, Right, Enter, Return, Home, PageUp, PageDown, End, Escape, BackSpace, Delete, F1…F12, Tab.

По неизвестным причинам мой браузер очень медленно открывает тестовые страницы моего удаленного сервера. Поэтому я думаю, смогу ли я снова подключиться к браузеру после выхода из скрипта, но не выполнять webdriver.quit() , это оставит браузер открытым. Это, вероятно, вид крючка или ручки веб-драйвера. Я просмотрел документацию по selenium API, но не нашел никакой функции. Я использую Chrome 62, x64, Windows 7, Селен 3.8.0. Я буду очень признателен за решение вопроса.

3 ответа

Нет , вы не можете повторно подключиться к предыдущей Web Browser после выхода из сценария. Даже если вы можете извлечь Session ID , Cookies и другие атрибуты сеанса из предыдущего Browsing Session тем не менее вы не сможете передать эти атрибуты как HOOK WebDriver .

Более понятным способом было бы позвонить в webdriver.quit() и указать новый Browsing Session

История:

Ранее были некоторые обсуждения и попытки повторно подключить WebDriver к существующему текущему сеансу просмотра. Вы можете найти обсуждения в этих QA:

Да , это довольно легко сделать.

Селен <-> Сеанс веб-драйвера представлен URL-адресом соединения и сессионным идентификатором, вы просто переподключаетесь к существующему.

Отказ от ответственности - в этом подходе используются внутренние свойства селена (в некотором роде "private"), которые могут изменяться в новых выпусках; вам лучше не использовать его для производственного кода; Лучше не использовать его против удаленного SE (вашего хаба или провайдера, такого как BrowserStack /Sauce Labs), потому что в конце объясняется утечка caveat /resource.

Когда запускается экземпляр веб-драйвера, вам необходимо получить вышеупомянутые свойства; Образец:

Теперь, когда эти два свойства известны, может подключиться другой экземпляр; «хитрость» заключается в том, чтобы инициировать драйвер Remote и предоставить _url выше - таким образом, он подключится к запущенному процессу селена:

Когда он будет запущен, вы увидите, что открывается новое окно браузера.
Это связано с тем, что после запуска драйвера библиотека selenium автоматически запускает для него новый сеанс - и теперь у вас есть 1 процесс веб-драйвера с двумя сеансами (экземплярами браузера).

Если вы перейдете к URL-адресу, вы увидите, что он выполняется на том новом экземпляре браузера, а не на том, который остался от предыдущего запуска, что не соответствует желаемому поведению.
На этом этапе необходимо сделать две вещи: а) закрыть текущий сеанс SE («новый») и б) переключить этот экземпляр на предыдущий сеанс:

И это все - теперь вы подключены к предыдущему /уже существующему сеансу со всеми его свойствами (куки, LocalStorage и т. д.).

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

Предупреждение - запуск процесса SE может привести к некоторому истощению ресурсов в системе.

Каждый раз, когда кто-то запускается, а затем не закрывается - как в первом фрагменте кода, - он будет оставаться там до тех пор, пока вы не убьете его вручную. Под этим я подразумеваю - например, в Windows - вы увидите процесс «chromedriver.exe», который вы должны завершить вручную, как только закончите с ним. Он не может быть закрыт драйвером, который подключился к нему, как к процессу удаленного селена.
Причина - всякий раз, когда вы запускаете локальный экземпляр браузера, а затем вызываете его метод quit() , он состоит из двух частей - первая удалить сеанс из экземпляра Selenium (что там сделано во втором фрагменте кода), а другой - остановить локальный сервис (chrome /geckodriver) - который обычно работает нормально.

Дело в том, что для удаленных сеансов отсутствует вторая часть - ваш локальный компьютер не может управлять удаленным процессом, это работа центра удаленного управления. Так что эта 2-я часть буквально является pass оператором python - запретом.

Если вы запустите слишком много служб Selen на удаленном концентраторе и не будете управлять им - это приведет к истощению ресурсов с этого сервера. Облачные провайдеры, такие как BrowserStack, принимают меры против этого - они закрывают сервисы без активности в течение последних 60-х и т. Д., И все же - это то, что вы не хотите делать.

А что касается локальных сервисов SE - просто не забывайте время от времени очищать ОС от потерянных драйверов селена, о которых вы забыли:)

Не вдаваясь в вопрос, почему вы думаете, что если оставить открытые окна браузера, это решит проблему медлительности, вам не нужен дескриптор для этого. Просто продолжайте выполнять тесты, не закрывая сеанс или, другими словами, не вызывая driver.quit() , как вы упомянули сами. Вопрос здесь, хотя рамки, которые идут со своим собственным бегуном? Нравится огурец?

В любом случае у вас должен быть какой-то код «настройки» и «очистки». Поэтому вам нужно убедиться, что на этапе «очистки» браузер вернулся в исходное состояние. Это значит:

Я использую Firefox 55.0.2 (64-bit) с selenium. Код работает нормально, однако я вижу значок в Firefox, говорящий Browser is under remote control , а URL выделен оранжевым цветом, как показано на снимке экрана ниже.

Firefox Message

1 ответ

Я пытаюсь написать тестовые случаи в проекте Django с Selenium. Инструкции, используемые для открытия браузера Firefox, следующие: class StudentTestCase(LiveServerTestCase): def setUp(self): self.browser = webdriver.Firefox() self.browser.implicitly_wait(2) def tearDown(self): self.browser.quit().

Сегодня я запускал несколько сценариев, которые разработал в Selenium-Python. Они работали просто отлично. Когда я закрывал окно &, чтобы повторно запустить тест, открывшийся браузер Firefox приводил к сбою &, мой сценарий терпел неудачу. Это буквально происходило одну секунду за другой. Я.

Похожие вопросы:

Я работаю над Selenium, и в настоящее время у меня есть концентратор, подключенный к двум виртуальным машинам под управлением linux со всеми браузерами. Я мог запускать браузеры до тех пор, пока они.

Как я могу запустить браузер Selenium (например, Firefox) свернутым? Я хочу, чтобы команда browser.start(mySettings) запускала браузер свернутым.

Я не знаю почему, но я не могу запустить браузер, используя приведенный ниже код. Я использую EPIC на eclipse. Для этого я установил необходимые модули selenium. Я получаю эту ошибку, когда запускаю.

Я пытаюсь написать тестовые случаи в проекте Django с Selenium. Инструкции, используемые для открытия браузера Firefox, следующие: class StudentTestCase(LiveServerTestCase): def setUp(self).

Сегодня я запускал несколько сценариев, которые разработал в Selenium-Python. Они работали просто отлично. Когда я закрывал окно &, чтобы повторно запустить тест, открывшийся браузер Firefox.

Я использую Selenium WebDriver на Ubuntu рабочем столе 16.04, и я не могу открыть браузер. Я получаю следующую ошибку после обновления Firefox (до этого все работало): Traceback (most recent call.

Firefox : 50.0.1, GeckoDriver :13, selenium 3.01, IDE: Eclipse, язык программирования : Java Используя приведенный ниже код : System.setProperty(webdriver.gecko.driver,C:\\geckodriver.exe);.

Когда я вызываю веб-браузер firefox с python firefox webdriver, firefox открывается с пустой страницей (ничего в навигационной панели), подождите и закройте. В python консоль дает мне эту ошибку .

Firefox браузер запускается только на док-станции на моем Mac, но активный экран отображается по-прежнему Eclipse. Как можно сместить фокус внимания на браузер? public class FirefoxFirst < public.

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