Как открыть новое окно в браузере, используя Selenium WebDriver для Python?
Проблема с этим в частности заключалась в том, что не представляется возможным отправлять ключи непосредственно в браузер, только для определенного элемента, подобного этому:
driver.find_element_by_id('elementID').send_keys(Keys.CONTROL + 'T')
Однако, когда команда, такая как это, отправляется элементу, она, похоже, ничего не делает. Я попытался найти верхний элемент HTML на странице и отправить ключи к нему, но снова был встречен с ошибкой:
driver.find_element_by_id('wrapper').send_keys(Keys.CONTROL + 'T')
Другая версия этого я нашел в Интернете и не смог проверить ее достоверность или ее отсутствие, потому что я не уверен, какой класс/модуль нуждается в импорте
act = ActionChains(driver) act.key_down(browserKeys.CONTROL) act.click("").perform() act.key_up(browserKeys.CONTROL)
Что-то очень похожее на другой синтаксис (я не уверен, что один или оба из них — правильный синтаксис)
actions.key_down(Keys.CONTROL) element.send_keys('t') actions.key_up(Keys.CONTROL)
Это только для веб-браузеров, Firefox, Chrome и т. Д. В примере PhantomJS не имеет привязок клавиш, и вам необходимо вызвать execute_script() с соответствующим кодом javascript. Если вам нужно передать элементы / файлы cookie, просто создайте ссылку target = _blank, а затем нажмите ее раньше.
3 ответа
Как насчет того, что вы делаете что-то вроде этого
driver = webdriver.Firefox() #First FF window second_driver = webdriver.Firefox() #The new window you wanted to open
В зависимости от того, с каким окном вы хотите взаимодействовать, вы отправляете команды соответственно
print driver.title #to interact with the first driver print second_driver.title #to interact with the second driver
Для всех вниз избирателей:
ОП запросил » it is only important that a second instance of the browser is opened. «. Этот ответ не охватывает ВСЕ ВОЗМОЖНОСТНЫЕ требования каждого из всех случаев использования. Другие ответы ниже могут удовлетворить вашу особую потребность.
Отлично! Так просто, но он достиг именно того, чего я желал, спасибо. Однако есть ли способ обобщить эту команду, чтобы она работала независимо от используемого браузера? Возможно, способ получить браузер, используемый в первом драйвере, чтобы открыть второй?
@»Perhaps «Может быть, есть способ определить, какой браузер используется в первом драйвере, чтобы открыть второй?» — Я не уверен, какую ценность это добавит. Даже если это так. Извините, я не знаю, как это сделать. В любом случае, если вы нашли этот ответ полезным, вы можете пометить его как ответ, вот как — meta.stackexchange.com/questions/5234/…
Это фактически открывает второй экземпляр Firefox. Различие между «новым окном в существующем браузере» и «совершенно новым браузерным приложением» может быть важным для некоторых тестовых случаев.
Он может использовать много памяти, когда вы открываете количество экземпляров браузеров. Каждый экземпляр займет более 100 МБ. Я рекомендую не делать этого.
Что делать, если вам нужно открыть новое окно во время обмена сеансом и еще много чего? Этот ответ работает, если вам действительно нужны 2 окна, и вам все равно, как пользователь будет взаимодействовать с браузером. Голосование с отрицательным голосом, потому что «Как открыть новое окно в браузере, используя Selenium WebDriver для Python?» предполагает, что они хотят новое окно от существующего браузера или драйвера. Это то, что я искал в Google, и ваш ответ не делает этого вообще. Может быть, вы должны включить другие методы для этого?
Вы можете использовать execute_script для открытия нового окна.
driver = webdriver.Firefox() driver.get("https://linkedin.com") driver.execute_script("$(window.open('https://twitter.com'))") print driver.current_window_handle # Switch to new window driver.switch_to_window(driver.window_handles[-1]) print " Twitter window should go to facebook " print "New window ", driver.title driver.get("http://facebook.com") print "New window ", driver.title # Switch to old window driver.switch_to_window(driver.window_handles[0]) print " Linkedin should go to gmail " print "Old window ", driver.title driver.get("http://gmail.com") print "Old window ", driver.title # Again new window driver.switch_to_window(driver.window_handles[1]) print " Facebook window should go to Google " print "New window ", driver.title driver.get("http://google.com") print "New window ", driver.title
Там нет упоминания о загрузке Jquery, и вы предполагаете, что он загружен по предыдущему URL, загруженному с PhantomJS. Кроме того, код JavaScript такой же, так что будет работать только driver.execute_script(«window.open(‘https://twitter.com’)») .
Я рекомендую использовать команду CTRL + N в Firefox, чтобы уменьшить потребление памяти, чем создавать новые экземпляры браузера.
import selenium.webdriver as webdriver from selenium.webdriver.common.keys import Keys browser = webdriver.Firefox() body = browser.find_element_by_tag_name('body') body.send_keys(Keys.CONTROL + 'n')
Способ переключения и управления окнами уже упоминался Dhiraj.
Это лучшее решение, так как окно открывается в том же драйвере. Но это не будет работать для страниц XML.
Ещё вопросы
- 0 Вызов функции из директивы без изолированной области видимости
- 1 Отключение событий JS
- 0 Отправка электронной почты через PHP с телом в MYSQL db и анализ \ n
- 1 Как правильно смоделировать HttpContextBase, чтобы мои модульные тесты работали
- 1 Должны ли похожие тестовые случаи jUnit находиться в одном тесте?
- 0 Поместите два делителя шириной 100% бок о бок
- 1 JavaScript — среднее число из массива с использованием функции Reduce
- 1 WPF Получить выбранную строку на сетке данных из шаблона
- 1 Доступ к локали Struts2 в Spring AbstractRoutingDataSource
- 0 Добавление в MySQL из формы Materialise
- 0 Проблема с повторяющимися кнопками поля формы
- 0 как отправить данные формы с помощью jquery, добавив идентификатор со значением
- 0 Как изменить свойство CSS id в зависимости от размера экрана
- 1 Как разделить длинную сопрограмму без использования await?
- 1 Кодирование напоминаний в Службе бесед Уотсона
- 1 Батик — поместите SVG поверх изображения
- 1 Преобразование имен столбцов в числа?
- 1 unregisterReceiver (получатель) в onPause заставляет получателя не регистрироваться
- 1 Произвольно вложенный словарь из кортежей
- 0 удалить дубликаты на левой таблице, сохраняя дубликаты на правой таблице SELECT JOIN
- 0 Утверждение рейтинга звезд jquery
- 0 Принятие значений динамически создаваемых текстовых полей ввода HTML в C #
- 0 удаление родителями не работает с добавленными элементами
- 0 Форма входа Symfony 2.3 не аутентифицируется
- 0 Как добавить модуль в AngularJS ngBoilerplate?
- 0 Доступ к индивидуальному свойству из SimpleXMLElement Object
- 0 Есть ли способ контролировать высоту выпадающего списка выбора?
- 1 C # Создание чатов с несколькими клиент-серверными сокетами
- 0 css form — расположение переключателей
- 1 Метод запуска Windows C # в определенное время
- 0 Производные от синглтона: один объект каждый из базы и производные?
- 1 Одна горячая ошибка кодирования Python машинного обучения
- 1 Нечистые функции возвращают что-нибудь?
- 1 Отключить визуальную студию 2013 Intellisence ссылки. Control + щелчок мышью
- 1 Шрифт C3.js tootltip
- 1 Снимок экрана окна приложения WPF отображается на кнопке
- 0 Угловой выбор помнить при перемещении по представлениям
- 1 pyshark: доступ к сырым данным udp
- 0 Сохраните данные JSON в текстовый файл и прочитайте его
- 0 JQuery Searchbox IE9 проблема
- 0 Как показать динамический контент на Ionic Custom POPUP
- 0 Как сделать ссылку кликабельной или не кликабельной по тексту в текстовой области?
- 1 Scrollview для Itemscontrol grid
- 0 Докер phpmyadmin после входа в систему: 504 Время ожидания шлюза
- 1 стиль соединения arc3 (FancyArrowPatch) и путь CURVE3 — две квадратичные кривые Безье, разные результаты?
- 0 Не удается сбросить форму с помощью ‘$ setPristine’
- 1 загрузить больше данных на страницу прокрутки
- 0 PHPMailer отказывался от почты, которая не получала правильного ответа
- 1 Как начать потоковое видео с помощью webRTC?
- 1 KnockoutJS — настройка меню выбора на основе выбора в другом меню
How to open new window Selenium Python
In this post, we are going to learn how to open new window Selenium Python with code examples. The Selenium web driver API is used for test automation on Windows or mobile, It helps us remotely control the different browsers automatically as if a real user is interacting by stimulating activities like opening or closing a new window, or tab, entering text in the textbox, select values from the dropdown, mouse control.
1. How to open new window Selenium Python
In this example, we will learn how to open new Windows Selenium Python, First, we will load a chrome browser driver with the help of ChromeDriverManager that automatically handle install of a new chrome browser driver, whenever the new version of the driver is released. To open a new window in selenium python, First, we have to use driver.get(“https://accounts.google.com/”) method to navigate to the link given as a parameter. it will open the yahoo login page and find the element by the link text “help” and the click() event is used to navigate to the privacy page.
- driver.get(): Navigate to a new link that is given as parameter
- window_handles: The selenium method is used for working with different windows. It stores window GUID that are help switch between windows.
- switch_to.window: It used the window_handles ids to move between the window and switch focus on a particular window.
from selenium import webdriver from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager import time driver = webdriver.Chrome(ChromeDriverManager().install()) driver.maximize_window() driver.get("https://accounts.google.com/") print("The First opened window = " + driver.title) driver.find_element(By.LINK_TEXT,"Help").click() time.sleep(3) driver.switch_to.window(driver.window_handles[1]) print("The Second opened window = " + driver.title) driver.switch_to.window(driver.window_handles[0]) print(driver.window_handles)
The First opened window = Yahoo The Second opened window = Welcome to the Yahoo Privacy Policy | Yahoo
2. How to open new window Selenium Python
To open a new window in selenium python, First, we have navigated to the link by using driver.get(“https://accounts.google.com/”) method will open the yahoo login page and find the element by the link name “help” and the click() event is used to navigate to the privacy page.
First Window URL = Yahoo Second Window URL = Welcome to the Yahoo Privacy Policy | Yahoo
Summary
In this post we have learned how to open new window Selenium Python with examples by using different method in selenium driver api ,driver.get(),driver.switch_to.window(),current window handle:,sleep(2),driver.execute_script(“window.open()”)
selenium switch to window
Switching windows or tabs is also possible from Python selenium code. The example below uses the selenium module and web driver.
This should work for all the supported web browsers including Chrome, Firefox, IE and all the others.
Related course:
switch to window
selenium switch to window
Before you start, install the selenium module, the Web Driver for your browser and the browser itself. The way this works is that the web driver controls the browser, and Python communicates with the web driver.
The selenium switch to window code shown below. It starts firefox, opens a webpage, then a new tab and window with different web sites.
# -*- coding: utf-8 -*-
from selenium import webdriver
import timebrowser=webdriver.Firefox()
browser.get(«https://www.reddit.com»)
browser.execute_script(«window.open()»)
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])
browser.get(«https://www.youtube.com»)
time.sleep(1)
browser.switch_to_window(browser.window_handles[0])
browser.get(«https://python.org»)
#browser.close()First it opens the web browser this way:
browser=webdriver.Firefox()
browser.get(«https://www.reddit.com»)Then it opens a new tab and switches to that tab.
print(browser.window_handles)
browser.switch_to_window(browser.window_handles[1])In the new tab it opens new url
Then it switchse back to the first tab
browser.switch_to_window(browser.window_handles[0])
Selenium Scroll Down Webpage