Рубрики
Без рубрики

Как Переключать Вкладки В Браузере С Помощью Selenium Python?

Автоматизация Selenium значительно облегчила жизнь тестировщикам автоматизации, особенно в таких случаях, как автоматизация вкладок Python Selenium switch. В этом блоге мы углубимся в то, как выполнить Selenium switch…

Автор оригинала: Nishant Choudhary.

Selenium automation предлагает ловкие способы наиболее эффективного выполнения повседневных задач. От захвата скриншотов до тестирования PDF-файлов нет предела тому , что вы можете сделать с помощью Selenium automation. Разработчики и тестировщики-мастера бурения сайтов и поиска лазеек. Чаще всего это упражнение включает в себя переключение вкладок несколько раз в день. Чтобы уменьшить ручные усилия, мы рекомендуем использовать Python Selenium для переключения вкладок.

В этой статье мы поможем вам освоить несколько способов переключения вкладок в Selenium с помощью Python.

Когда Нам Нужно Открывать Или Переключать Вкладки В Selenium Automation?

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

App Suits – Тестирование Функций, Которые Могут Работать Параллельно

Наиболее очевидный сценарий-это когда ваше приложение слишком большое и в нем есть мини-приложения. Например, если вы использовали Linkedin, вы могли столкнуться с “Обучением Linkedin” и “Навигатором продаж Linkedin” в качестве двух подприложений. Аналогично, многие другие приложения состоят из нескольких других более мелких составляющих приложений. Например, G-suite, Youtube (media player & creator studio), Hubspot, Azure и Amazon и т. Д., Некоторые из них по умолчанию открываются на новой вкладке. Для других имеет смысл намеренно открыть новое приложение на новой вкладке. Вот тут-то и вступает в дело тестирование автоматизации Selenium.

Тестирование Функций приложения для электронной коммерции

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

Тестирование функциональности загрузки мультимедиа

Другим распространенным примером может быть параллельная загрузка нескольких видео на платформу для ведения блогов, такую как Vimeo или Youtube. Это идеальный случай для тестирования с несколькими браузерами и кросс-вкладками.

Короче говоря, тестирование автоматизации включает в себя переключение вкладок в следующих сценариях –

  • Тестирование параллельных функций больших приложений, например, Zoho, G-suite, Office365 и т. Д.
  • Тестирование ссылок, которые автоматически открываются на новой вкладке. Например, приложения для электронной коммерции
  • Параллельное тестирование независимых приложений, если в этом возникнет необходимость.

В этом уроке по переключению вкладок Python Selenium мы сосредоточимся на открытии и переключении между вкладками с помощью Python & Selenium. У нас есть специальные статьи для операций тестирования на странице, таких как обработка предупреждений, перетаскивание объектов с помощью мыши или создание полностраничных скриншотов. Возможно, вы захотите обратиться к ним, чтобы глубже погрузиться в примеры использования Selenium automation.

Как Создать Новую Вкладку В Selenium Python?

Чтобы начать работу с Python Selenium switch tabs automation, ваша система должна быть оснащена необходимыми инструментами. Вот все предпосылки:

  • В вашей системе установлены последние привязки Selenium-Python, Python3, pip, virtualenv
  • У вас также есть путь к исполняемому веб-драйверу по выбору вашего браузера в вашей системе.

Если нет, вы можете просто следовать инструкциям, приведенным в этом Selenium 4 с Python blog, чтобы начать работу с Python Selenium switch tab automation. Мы можем открывать новые вкладки в Selenium-Python, выполняя JavaScript, а также используя класс ActionChains Selenium.

Давайте посмотрим, как это можно сделать.

Откройте Новые Вкладки В Selenium, Выполнив JavaScript

В следующем коде замените “chrome_webdriver_executable_path” путем к исполняемому файлу chrome. В идеале вы должны добавить его в переменную системного ПУТИ.

Пример кода 1-

from selenium import webdriver
import time
driver = webdriver.Chrome(chrome_webdriver_executable_path)
driver.maximize_window()
driver.get("https://www.cntraveller.in/")
# to fire up a new tab using javascript and load google.com
driver.execute_script('''window.open("https://www.google.com", "_blank");''')
time.sleep(5)
driver.quit()

execute_script – это метод, предоставляемый Selenium для выполнения фрагментов JavaScript в удаленно управляемом браузере. Его можно использовать для прокрутки веб-страницы, открытия нового окна, запуска оповещения и многого другого. window.open – это метод DOM для запуска новых вкладок. Он принимает URL, имя, спецификации и заменяет их в качестве параметров. Для нашего варианта использования Selenium automation testing нас интересует только URL-адрес и имя. Вы можете использовать спецификации для запуска новых вкладок различных размеров и конфигураций.

В “Примере кода 1”, если вы хотите открыть пустую вкладку в Selenium Python, замените строку после комментария следующим кодом –

driver.execute_script('''window.open("", "_blank");''')

Или другой эквивалент был бы –

driver.execute_script('''window.open();''')

Поскольку “_blank” является значением по умолчанию для необязательного параметра “name”. “_parent”, “_self”, “_top” – это некоторые другие значения, которые могут потребоваться для открытия “url” в родительском фрейме, том же окне или верхнем фрейме соответственно.

Откройте Новые Вкладки В Selenium, Выполнив Класс ActionChains

Второй способ запуска новой вкладки в Selenium-использовать метод key_up и key_down класса ActionChains Selenium и щелкнуть по HTML-элементу со ссылкой.

Пример Кода 2-

from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome(chrome_webdriver_executable_path)
driver.get('https://www.lambdatest.com/')
time.sleep(5)
# locates a link element on the loaded url using xpath
new_tab_link = driver.find_element_by_xpath('//a[contains(@class,"nav-link") and contains(@href,"selenium-automation")]')
time.sleep(5)
# instantiates ActionChains class of selenium webDriver
action = ActionChains(driver)
# clicks on located kink element with CONTROL button in pressed state using actionChains class. This opens the link in new tab 
action.key_down(Keys.CONTROL).click(new_tab_link).key_up(Keys.CONTROL).perform() 
time.sleep(3)
driver.quit()

Класс ActionChains selenium grid обеспечивает низкоуровневое взаимодействие с элементами веб-приложения. Тестировщики Selenium automation часто используют его для перемещения курсора мыши, двойного щелчка по HTML-элементу, операций перетаскивания и, конечно же, для нажатия клавиш клавиатуры. Метод цепочек действий Key_down имитирует нажатие клавиши, переданной в качестве параметра. Метод Key_up освобождает нажатую клавишу. Опять же, ключ передается в качестве параметра методу key_up.

Откройте Новые Вкладки В Selenium, Выполнив send_keys

Другой способ открыть новые вкладки в Selenium-это использовать send_keys для элемента “тело”. Это используемый синтаксис-

driver.find_element_by_tag_name('body').send_keys(Keys.CONTROL + 't') 

Примечание: Вы найдете множество решений в Интернете, утверждающих: “Это идентично совместному нажатию клавиш Ctrl и” t “в браузерах, управляемых пользователем”. или “Этот метод запускает новую вкладку для элемента в фокусе”. Если вам нужно открыть ссылку на новой вкладке, получите местоположение элемента с помощью селекторов XPath или CSS и вложите в него операцию send_keys с помощью клавиш .УПРАВЛЕНИЕ + ‘t’ в качестве параметров. Но, к сожалению, это не работает. Мы проверили последнюю версию Selenium & Python на дату публикации этой статьи.

Как Переключать Вкладки В Selenium Python?

Переключение вкладок в selenium python не так уж и громоздко. Мы можем использовать current_window_handle & window_handles метод Selenium WebDriver для автоматизации переключения вкладок в сетке Selenium с помощью Python. Кроме того, мы также можем использовать класс ActionChains для переключения вкладок в дистанционно управляемом кроссбраузерном тестировании автоматизации.

Переключайте Вкладки В Selenium Python, Выполняя switch_to_window, switch_to.window, current_window_handle и window_handles

В этом учебнике Selenium Python switch tab мы можем начать работу с помощью нескольких методов, включая switch_to_window, switch_to.window, current_window_handle & window_handles . Прежде чем мы перейдем к выполнению, вы должны отметить, что метод switch_to_window теперь устарел, а метод switch_to.window заменил его.

import unittest
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
from selenium.webdriver.common.keys import Keys
class SwitchTab(unittest.TestCase):
    def setUp(self):
        # self.driver = webdriver.Firefox()
        self.driver = webdriver.Chrome(chrome webdriver executable location)
    def test_switch_tab(self):
        driver = self.driver
        driver.maximize_window()
        driver.get('https://www.lambdatest.com/')
        time.sleep(5)
# collects handle ID of current window
        first_tab_handle = driver.current_window_handle
        print("first_tab_handle : "+str(first_tab_handle))
        # locates a link element on the loaded url using xpath
new_tab_link = driver.find_element_by_xpath('//a[contains(@class,"nav-link") and contains(@href,"selenium-automation")]')
        time.sleep(5)
        action = ActionChains(driver)
        # clicks on the located link element with CONTROL button in pressed state using actionChains class. This opens the link in a new tab.
 
action.key_down(Keys.CONTROL).click(new_tab_link).key_up(Keys.CONTROL).perform() 
        time.sleep(3)
        print("driver.window_handles : " + str(driver.window_handles))
        print("current window handle : "+ str(driver.current_window_handle))
        if driver.current_window_handle == first_tab_handle:
            print("driver focus is not switched to new tab opened using actionChains.")
        else:
            print("window handle has changed. Driver switched focus to new tab.")
        driver.switch_to.window(driver.window_handles[1])
        time.sleep(3)
    # stores handle of tab opened using actionchains
        if driver.current_window_handle != first_tab_handle:
            ctrl_click_tab = driver.current_window_handle
            print("driver focus switched. New tab's handle id is - ")
            print(ctrl_click_tab)
        else:
            print("driver focus is not shifted to new tab.")
        time.sleep(5)
        driver.execute_script('''window.open("", "_blank");''')
        time.sleep(5)
        print("driver.window_handles : " + str(driver.window_handles))
        try:
            if (driver.current_window_handle == first_tab_handle) or (driver.current_window_handle == ctrl_click_tab):
                print("Though, this tab seems to be an active window as it's highlighted but driver control still remains with the tab we last switched to.")
        except:
            pass
        time.sleep(3)
        for handle in driver.window_handles:
            if (handle == first_tab_handle) or (handle == ctrl_click_tab):
                print(handle)
            else:
                js_tab_handle = handle
                print("js tab handle is -")
                print(js_tab_handle)
                driver.switch_to.window(js_tab_handle)
                time.sleep(5)
                break
        if driver.current_window_handle == js_tab_handle:
            print("driver focus shifted to js tab with handle id -")
    print(driver.current_window_handle)
        driver.get('https://www.lambdatest.com/blog/')
        # shifts control or focus to the first window in window handles, it's not the last opened tab but 1st tab in order.
        driver.switch_to_window(driver.window_handles[1])
 
        time.sleep(5)
        driver.get('https://www.lambdatest.com/pricing')
        driver.switch_to.window(driver.window_handles[-1])
        time.sleep(5)
        driver.get('https://www.lambdatest.com/newsletter/')
        time.sleep(3)
        driver.switch_to.window(first_tab_handle)
        if driver.current_window_handle == first_tab_handle:
            print("current_window_handle : " + str(driver.current_window_handle))
            print("driver switched to first tab")
        else:
            print("driver switching failed")
        time.sleep(5)
    def tearDown(self):
        self.driver.quit()
if __name__ == '__main__':
    unittest.main()

Разбивка кода-

Давайте разберем код для большей ясности на Selenium Python switch tab automation. Вот и все-

import unittest
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
import time
from selenium.webdriver.common.keys import Keys

Здесь мы сначала импортируем все необходимые зависимые библиотеки. Модуль Python unittest для написания тестовых случаев на Python. Модуль WebDriver из библиотеки python-selenium для автоматизации действий браузера. И класс ActionChains от Selenium WebDriver – для автоматизации низкоуровневых взаимодействий с использованием прерываний мыши и клавиатуры. Модуль времени Python для неявной или явной приостановки выполнения или ожидания. Наконец, модуль Keys от Selenium WebDriver для имитации ввода кнопок клавиатуры.

 def setUp(self):
        # self.driver = webdriver.Firefox()
        self.driver = webdriver.Chrome()

Это делается для настройки среды браузера тестирования. Если вы используете платформу тестирования облачной автоматизации , такую как Lambda Test , для этого тоже в идеале необходимо настроить параметры в этой функции. Здесь мы используем Chrome в качестве браузера, но вы можете использовать любой браузер. Сценарий работает точно так же и с Firefox или Edge.

def test_switch_tab(self):
        driver = self.driver
        driver.maximize_window()

Далее мы определяем функцию “test_switch_tab”. В идеале, если вы используете библиотеку модульных тестов, запустите эту функцию с именем ” test “. driver.maximize_window запускает экземпляр Chrome в полноэкранном режиме.

driver.get('https://www.lambdatest.com/')
time.sleep(5)

Первая строка загружает домашнюю страницу теста Lamda в нашем недавно запущенном экземпляре Chrome. time.sleep(сек) приостанавливает выполнение следующих строк программы на указанные секунды.

Домашняя страница лямбда-теста
first_tab_handle = driver.current_window_handle
print("first_tab_handle : "+str(first_tab_handle))

Мы используем метод current_window_handle драйвера, чтобы получить и сохранить идентификатор дескриптора для активной вкладки в переменной с именем first_tab_handle .

new_tab_link = driver.find_element_by_xpath('//a[contains(@class,"nav-link") and contains(@href,"selenium-automation")]')

На домашней странице LamdaTest мы находим ссылку на страницу selenium-automation с использованием XPath.

action = ActionChains(driver)        action.key_down(Keys.CONTROL).click(new_tab_link).key_up(Keys.CONTROL).perform() 

Затем мы создаем цепочки действий и выполняем операции key_down, click и keep_up, чтобы открыть веб-страницу selenium-automation Лямбда-теста на новой вкладке. Мы пропустим объяснение следующих нескольких самоочевидных строк кода, которые демонстрируют, что управление драйвером остается на первой вкладке , запросив метод current_window_handle драйвера.

driver.switch_to.window(driver.window_handles[1])
ctrl_click_tab = driver.current_window_handle

Здесь мы используем метод switch_to.window и передаем ему идентификатор дескриптора новой вкладки, запущенной с использованием класса ActionChains в качестве аргумента. Это переключило управление драйвером на вкладку с веб-страницей selenium-automation LamdaTest.

driver.execute_script('''window.open("", "_blank");''')

Эта строка запускает новую вкладку. Он действительно подсвечивается, но элемент управления по-прежнему находится на вкладке selenium-automation.

for handle in driver.window_handles:
if (handle == first_tab_handle) or (handle == ctrl_click_tab):
      	print(handle)
else:
      	js_tab_handle = handle

Приведенные выше строки логически извлекают идентификатор дескриптора для новой вкладки JS и сохраняют его в js_tab_handle.

driver.switch_to.window(js_tab_handle)

Эта строка переключается на последнюю вкладку.

driver.switch_to_window(driver.window_handles[1])
driver.switch_to.window(driver.window_handles[-1])

Мы также можем переключаться между вкладками с помощью window_handles indexes, отрицательные индексы отсчитываются в обратном порядке от последней вкладки.

кодирование jag
учебник по selenium python

Но это хорошая идея-хранить идентификаторы в переменных и переключать вкладки с помощью переменных, как показано в приведенной ниже строке кода.

driver.switch_to.window(first_tab_handle)

Эта функция автоматически вызывается после выполнения тестового набора и закрытия драйвера.

def tearDown(self):
        self.driver.quit()

Выход-

При успешном выполнении приведенного выше скрипта вы увидите следующий вывод –

успешное выполнение

Как Переключаться Между кадрами В Selenium Python?

Переключение между кадрами аналогично переключению между вкладками. Разница заключается в синтаксисе. Здесь мы должны использовать switch_to.frame()

Мы можем переключаться между кадрами, находя элемент с помощью селекторов XPath или CSS, а также переключаться с помощью индекса iFrame.

Чтобы вернуть управление драйвером к содержимому по умолчанию, используйте switch_to.default_content()

Переключение Вкладок С Помощью Selenium Automation В Облаке Лямбда – Тестов

Использование облачной платформы-лучший способ использовать автоматизацию Selenium и легко получать желаемые результаты. Вы можете выполнить автоматизацию вкладок переключения Python Selenium в cloud Selenium Grid LamdaTest, чтобы максимально использовать ее.

Для этого вы можете получить значение для имени пользователя, маркера доступа и gridUrl при регистрации в лямбда-тесте. Вы можете зарегистрироваться здесь бесплатно. Как только у вас будет необходимая информация, вам нужно будет объявить желаемые возможности вашей среды тестирования. Генератор лямбда-тестов DesiredCapabilities предоставит вам возможности, основанные на вашем выборе ОС, браузера и его версии, разрешении.

Исполнение-

  def setUp(self):
        username = "YOUR_LAMBDATEST_USERNAME"
        accessToken = "YOUR_LAMBDATEST_ACCESS_TOKEN"
        gridUrl = "hub.lambdatest.com/wd/hub"
        desired_cap = {
            'platform' : "win10",
            'browserName' : "chrome",
            'version' :  "67.0",
            "resolution": "1024x768",
            "name": "LambdaTest selenium automation switch tabs using python",
            "build": "LambdaTest selenium python switch tabs",
            "network": True,
            "video": True,
            "visual": True,
            "console": True,
        }
        url = "https://"+username+":"+accessToken+"@"+gridUrl 
        print("Initiating remote driver on platform: "+desired_cap["platform"]+" browser: "+desired_cap["browserName"]+" version: "+desired_cap["version"])
        self.driver = webdriver.Remote(
            desired_capabilities=desired_cap,
            command_executor= url
        )
        # self.driver = webdriver.Firefox()
        # self.driver = webdriver.Chrome()

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

Вывод

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

Кроме того, мы рекомендуем использовать облачную платформу Lambda Test, которая проста и экономична. С более чем 2000 операционными системами и браузерами, которые вы можете предложить, вы так много можете сделать с автоматизацией лямбда-тестов.

Счастливого Тестирования!