Как переключать вкладки в браузере с помощью Selenium Python?

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

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

Когда нам нужно открывать или переключать вкладки в Selenium Automation?

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

App Suits — тестирование функций, которые могут работать параллельно

Самый очевидный сценарий — это когда ваше приложение слишком большое и содержит мини-приложения. Например, если вы использовали Linkedin, вы могли столкнуться с «Linkedin Learning» и «Linkedin Sales Navigator» как с двумя дополнительными приложениями. Точно так же многие другие приложения состоят из нескольких других более мелких составных приложений. Например, G-suite, Youtube (медиаплеер и творческая студия), Hubspot, Azure и Amazon и т. д. Некоторые из них по умолчанию открываются в новой вкладке. Для других имеет смысл намеренно открывать новое приложение в новой вкладке. Вот здесь и приходит на помощь автоматизированное тестирование Selenium.

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

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

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

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

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

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

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

Как создать новую вкладку в Selenium Python?

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

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

Если нет, вы можете просто следовать инструкциям, приведенным в этом Селен 4 с Питоном блог, чтобы начать работу с автоматизацией переключения вкладок Python Selenium. Мы можем открывать новые вкладки в Selenium-Python, выполняя JavaScript, а также используя класс Selenium ActionChains.

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

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

В следующем коде замените «chrome_webdriver_executable_path» на путь к исполняемому файлу Chrome. В идеале вы должны добавить его в системную переменную PATH.

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

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

execute_script — это метод, предоставляемый Selenium для выполнения фрагментов JavaScript внутри удаленно управляемого браузера. Его можно использовать для прокрутки веб-страницы, открытия нового окна, запуска предупреждения и многого другого. окно.открыть это метод DOM для запуска новых вкладок. Он принимает URL, имя, спецификации и заменяет их в качестве параметров. Для нашего варианта использования автоматизации тестирования Selenium нас интересуют только 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 метод класса Selenium ActionChains и щелкните элемент 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('
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 часто используют его для перемещения курсора мыши, двойного щелчка по элементу HTML, операций перетаскивания и, конечно же, для нажатия клавиш клавиатуры. Метод Key_down ActionChains имитирует нажатие клавиши, переданной в качестве параметра. Метод Key_up освобождает нажатую клавишу. Опять же, ключ передается в качестве параметра методу key_up.

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

Еще один способ открыть новые вкладки в Selenium — использовать send_keys для элемента «body». Это используемый синтаксис-

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

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

Как переключать вкладки в Selenium Python?

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

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

В этом руководстве по вкладке переключения Selenium Python мы можем начать работу, используя несколько методов, включая switch_to_window, switch_to.window, current_window_handle & окна_ручки. Прежде чем мы перейдем к исполнению, вы должны отметить, что 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.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)

        first_tab_handle = driver.current_window_handle
        print("first_tab_handle : "+str(first_tab_handle))
        
new_tab_link = driver.find_element_by_xpath('//a[contains(@class,"nav-link") and contains(@href,"selenium-automation")]')
        time.sleep(5)
        action = ActionChains(driver)
        
 
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)
    
        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/')
        
        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. Вот оно-

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

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

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

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

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

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

driver.get('
time.sleep(5)

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

Домашняя страница LamdaTest

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 мы находим ссылку на страницу автоматизации селена с использованием XPath.

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

Затем мы создаем экземпляры ActionChains и выполняем связанные операции key_down, click и key_up, чтобы открыть веб-страницу автоматизации селена LambdaTest в новой вкладке. Мы пропустим объяснение следующих нескольких не требующих пояснений строк кода, демонстрирующих, что управление драйвером остается на первой вкладке запросив у драйвера метод 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])

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

кодируешь меня

учебник по селеновому питону

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

driver.switch_to.window(first_tab_handle)

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

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

Выход-

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

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

Как переключаться между iFrames в Selenium Python?

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

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

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

Переключение вкладок с помощью автоматизации Selenium в облаке LambdaTest

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

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

Исполнение-

  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 = " 
        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()

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

Вывод

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

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

Удачного тестирования!

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *