Статьи

22 практических совета по тестированию автоматизации с Selenium WebDriver

Автоматизация тестирования с помощью Selenium позволила тестировщикам веб-сайтов по всему миру легко выполнять автоматическое тестирование веб-сайтов. Webdriver является ключевым компонентом платформы Selenium, с помощью которого вы можете выполнять автоматическое перекрестное браузерное тестирование вашего веб-сайта или веб-приложения на различных типах браузеров, например, Google Chrome, Mozilla Firefox, Safari, Opera, Internet Explorer, Microsoft Edge и т. Д.

Основным преимуществом выполнения автоматизации тестирования с Selenium Webdriver перед другими инструментами / средами веб-автоматизации является поддержка широкого ряда языков программирования, а именно Python, Java, C #, Ruby, PHP, JavaScript, .Net, Perl и т. Д. Если вы Если вы новичок в автоматизации тестирования с Selenium WebDriver, то вы можете взглянуть на наш учебник Selenium WebDriver по автоматическому межбраузерному тестированию, где мы поговорим об общей архитектуре Selenium и о том, как можно использовать эту платформу с популярными языками программирования. Вы также можете проверить мою предыдущую статью об учебнике по настройке Selenium Grid для кросс-браузерного тестирования , чтобы использовать возможности параллельного тестирования с Selenium . Независимо от используемого языка программирования, существуют определенные рекомендации, применимые для автоматизации тестирования с помощью Selenium Webdriver (независимо от языка разработки).

В этой статье я поделюсь с вами некоторыми ключевыми советами по автоматизации тестирования Selenium, которые касаются аспектов оптимизации кода, повышения производительности, динамической загрузки веб-страниц, обработки кода CSS и HTML и т. Д.

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

Selenium Совет № 1 — Установка исполняемого пути веб-драйвера Selenium

Для связи с тестируемым браузером вам необходимо сначала загрузить соответствующий плагин / веб-драйвер с их официального сайта . Этот плагин будет отвечать за связь с браузером, и он должен присутствовать на вашем компьютере (на котором вы разрабатываете тесты). Путь к плагину / веб-драйверу должен быть задан в конфигурации Selenium Webdriver.

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

Selenium WebDriver

Если geckodriver отсутствует в расположении браузера, вам необходимо вручную добавить его путь в исходный код. Мы импортируем модуль selenium.webdriver.firefox.firefox_binary, чтобы указать путь к исполняемому файлу Firefox.

1
2
3
4
5
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
  
ff_binary = FirefoxBinary('path/to/gecko driver')
browser = webdriver.Firefox(firefox_binary=ff_binary)

Как видно из приведенного ниже фрагмента кода, мы не указали местоположение геккодривера (Firefox Webdriver), поскольку он находится в том же месте, где присутствует браузер Firefox. Это более надежный подход по сравнению с предыдущим и может помочь уменьшить основные ошибки при внедрении автоматизации тестирования с помощью Selenium.

1
2
3
4
5
6
7
8
''' Import the required modules for development '''
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
  
'''Creation of Firefox Webdriver '''
driver = webdriver.Firefox()

Selenium Tip # 2 — снимок экрана автоматизации тестирования с Selenium WebDriver

Выполняя тесты, вы столкнулись бы с требованиями, где необходимо сделать снимок экрана для проверки результатов тестов. Selenium WebDriver предлагает три API, через которые вы можете сделать скриншот веб-страницы.

  1. save_screenshot ( ‘путь-где-кадр-должен-быть сохранены / filename.png’)
  2. get_screenshot_as_file ( ‘путь-где-кадр-должен-быть сохранены / filename.png’)
  3. get_screenshot_as_png ()

Первые два API позволяют сохранить экран текущего окна в файле .png. API возвращает False, если есть IOError, иначе он возвращает True. Эти API-интерфейсы будут работать только в том случае, если расширение файла равно .png, иначе Python выдаст ошибку и сохраненный контент может быть недоступен для просмотра. Если вы хотите сделать снимок экрана вашего текущего окна в двоичном формате, используйте API get_screenshot_as_png ().

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
''' Import the required modules for development '''
from selenium import webdriver
import StringIO
from PIL import Image
  
'''Creation of Firefox Webdriver '''
driver = webdriver.Firefox()
  
'''Taking screenshot of the web-page. File would be saved in the location where the source code is present '''
  
'''Option - 1'''
driver.save_screenshot('screenshot_1.png');
  
  
'''Option - 2'''
driver.get_screenshot_as_file('screenshot_2.png');
'''Option - 3'''
screenshot = driver.get_screenshot_as_png();
     
screenshot_size = (20, 10, 480, 600)
image = Image.open (StringIO.StringIO(screen))
region = image.crop(screenshot_size)
region.save('screenshot_3.jpg', 'JPEG', optimize=True)

Selenium Совет № 3 — Обновление веб-страницы во время тестирования автоматизации с Selenium WebDriver

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

1. метод driver.refresh ()

Как видно из названия, метод refresh () используется для обновления веб-страницы. Следовательно, это асинхронный характер; Вы должны использовать этот API вместе с document.readyState () .

1
2
3
4
5
6
7
''' Import the required modules for development '''
from selenium import webdriver
  
'''Creation of Firefox Webdriver '''
driver = webdriver.Firefox()
driver.refresh()

2. Метод ActionChains ()

ActionChains () — это еще один способ автоматизации низкоуровневых взаимодействий для автоматизации тестирования с Selenium, таких как нажатие клавиш, действия кнопок мыши и т. Д. Чтобы обновить веб-страницу, мы используем комбинацию «CTRL + F5».

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
  
'''Creation of Firefox Webdriver '''
# driver = webdriver.Chrome()
driver = webdriver.Firefox()
  
time.sleep(5)
  
print("Before refresh")
  
ActionChains(driver) \
    .key_down(Keys.CONTROL) \
    .send_keys(Keys.F5) \
    .key_up(Keys.CONTROL) \
    .perform()
  
print("After refresh")
  
sleep(5)
driver.quit()

Selenium Tip # 4 — Откройте веб-страницу в новой вкладке

execute_script может использоваться для синхронного выполнения кода JavaScript в текущем окне / фрейме. Аргумент (JavaScript) для открытия веб-страницы передается в качестве аргумента execute_script.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
  
driver = webdriver.Firefox()
  
driver.implicitly_wait(10)
  
#open tab
driver.execute_script("window.open('https://www.lambdatest.com', 'new tab')")
  
sleep(5)
driver.quit()

Selenium Tip # 5 — Сохранение частичного скриншота веб-страницы

В некоторых случаях вам может понадобиться сделать частичный снимок экрана с веб-страницей для автоматизации тестирования с помощью Selenium. В таких случаях вы можете использовать модуль Pillow. Сначала необходимо установить модуль Pillow / PIL с помощью команды

pip install pillow

Снимок экрана всей веб-страницы сделан с помощью API get_screenshot_as_png () . Как только снимок экрана готов, библиотека PIL используется для открытия захваченного изображения в памяти, после чего изображение (которое содержит весь снимок экрана веб-страницы) обрезается, чтобы получить результирующее изображение.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
from selenium import webdriver
''' Install the Pillow module using the command pip install pillow '''
from PIL import Image
from io import BytesIO
  
driver = webdriver.Firefox()
driver.get('http://google.com/')
  
# Use the Inspection tool to find the location of the logo
element = driver.find_element_by_id('hplogo')
image_location = element.location
size = element.size
  
png = driver.get_screenshot_as_png()
  
''' Since the webpage screenshot is ready, we can exit the browser.'''
driver.quit()
  
''' PIL Library is used to open the image in memory '''
crop_image = Image.open(BytesIO(png))
  
''' Extract the Left, Right, Top, and Bottom co-ordinates '''
  
left = image_location['x']
top = image_location['y']
right = image_location['x'] + size['width']
bottom = image_location['y'] + size['height']
  
crop_image = crop_image.crop((left, top, right, bottom))
crop_image.save('logo-screenshot.png')

Selenium Совет № 6 — Выполнить код JavaScript

execute_script используется для выполнения кода JavaScript при выполнении автоматизации тестирования с Selenium WebDriver. Синтаксис: driver.execute_script («код JavaScript здесь») .

Selenium WebDriver

Как показано в примере ниже, выполняется действие on_click для Register [Имя класса home-cta].

01
02
03
04
05
06
07
08
09
10
11
from selenium import webdriver
from time import sleep
  
driver = webdriver.Firefox()
  
driver.execute_script("document.getElementsByClassName('home-cta')[0].click()")
  
sleep(10)
  
driver.close()

Selenium Tip # 7 — Извлечение результатов кода JavaScript

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
from selenium import webdriver
from time import sleep
  
driver = webdriver.Firefox()
  
driver.execute_script("document.getElementsByClassName('home-cta')[0].click()")
     
result = driver.execute_script("return 0")
print(result)
  
sleep(10)
  
driver.close()

Selenium Tip # 8 — Работа с несколькими типами браузеров для автоматического кросс-браузерного тестирования

Существует несколько сценариев, которые могут вам понадобиться для проверки кода на разных браузерах, например Firefox, Chrome, Internet Explorer. Практика тестирования веб-сайта в разных браузерах называется автоматическим тестированием браузера . Чтобы выполнить автоматическое тестирование браузера с помощью Selenium Automation, вы должны включить выборочную обработку этих браузеров в код вашего юнит-теста или кода pytest. Фрагмент кода (который использует pytest) для работы с несколькими браузерами показан ниже:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
# Import the 'modules' that are required for execution
  
import pytest
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep
  
#Fixture for Firefox
@pytest.fixture(params=["chrome", "firefox"],scope="class")
def driver_init(request):
    if request.param == "chrome":
        # Perform necessary actions here
    if request.param == "firefox":
    # Perform necessary actions here
    yield
    web_driver.close()
    ...........
    ...........

Selenium Совет № 9 — Расположение элементов на веб-странице с помощью CSS-локаторов

Когда вы выполняете автоматизацию тестирования с помощью Selenium, поиск веб-элементов на странице становится основой для ваших сценариев автоматизации. Если вы хотите выполнить условное выполнение на основе наличия определенного типа веб-элемента, такого как Tag, Class, ID и т. Д., Вы можете использовать API find_elements _ ***. Некоторые из них упомянуты ниже

  • find_elements_by_class_name — поиск элементов по имени класса
  • find_elements — поиск элементов по стратегии и локатору
  • find_element_by_link_text — Найти элемент по тексту ссылки
  • find_element_by_partial_link_text — найти элемент путем частичного совпадения текста ссылки

Ниже показано использование find_element_by_partial_link_text & find_elements_by_class_name, где элементы ищутся на https://www.lambdatest.com/, который является тестируемым URL.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep
from selenium.common.exceptions import NoSuchElementException
  
driver = webdriver.Firefox()
  
try:
    element = driver.find_element_by_partial_link_text("START TESTING")
    print("Partial text Element found")
    element = driver.find_elements_by_class_name('home-btn-2')
    print("Button Element found")
except NoSuchElementException:
    print("No element found")
     
sleep(10)
driver.close()

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

Selenium Tip # 10 — HTML источник WebElement

Свойство innerHTML можно использовать для захвата исходного кода веб-страницы. innerHTML также используется для проверки любых изменений на странице, так как страница была впервые загружена веб-браузером. Вы можете написать весь исходный код в файле .html для дальнейшего использования.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.keys import Keys
from time import sleep
import io
  
driver = webdriver.Firefox()
  
elem = driver.find_element_by_xpath("//*")
source_code = elem.get_attribute("innerHTML")
  
filename = open('lambdatest_page_source.html', 'w')
filename.write(source_code)
filename.close()
     
sleep(10)
  
driver.close()

Selenium Tip # 11 — Выполните действия над мышью

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

В приведенном ниже примере тестируемый URL-адрес — https://www.lambdatest.com/ . Цель состоит в том, чтобы перейти на вкладку автоматизации на домашней странице. Первая задача — найти Меню, которое соответствует идентификатору bs-example-navbar-collapse-1 . Используя Inspect Tool, мы получаем правильный идентификатор элемента, детали которого показаны на снимке

Selenium WebDriver

Мы переходим в Меню, используя операцию move_to_element, которая является частью модуля action_chains. Следующая задача — найти пункт меню, который содержит текст «Автоматизация», для которого мы используем find_element_by_xpath («// a [содержит (текст (),« Автоматизация »)]»), после чего выполняется операция Click.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from time import sleep
     
driver = webdriver.Firefox()
  
action = ActionChains(driver);
  
# Head on the top-level menu on Lambdatest website
parent_level_menu = driver.find_element_by_id("bs-example-navbar-collapse-1")
action.move_to_element(parent_level_menu).perform()
  
# Perform a click operation on the Menu item which contains text Automation
child_level_menu = driver.find_element_by_xpath("//a[contains(text(),'Automation')]")
child_level_menu.click();
  
sleep(10)
  
driver.close()

Selenium Tip # 12 — Закрытие вкладок без закрытия браузера

Один из самых основных, но обязательных советов для любого сценария автоматизации Selenium — понять, как закрывать вкладки, не закрывая весь браузер. driver.close () закрывает выделенную вкладку, а driver.quit () закрывает все вкладки (браузера) вместе с выходом из драйвера. В случае, если вам нужно держать окно браузера открытым (и закрывать все остальные вкладки), вы можете использовать метод switch_to.window, у которого входной параметр имеет идентификатор дескриптора окна.

Примечание. Существуют и другие способы решения этой проблемы. Метод window.open можно использовать с соответствующими параметрами (например, открытие нового окна, открытие новой вкладки и т. д.). Можно использовать отправку правильных комбинаций клавиш с помощью send_keys , но поведение зависит от версии geckodriver (для Firefox), версии chromedriver и т. Д. Следовательно, подход send_keys не является предпочтительным, поскольку выходные данные могут различаться в зависимости от версий WebDriver.

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
from selenium import webdriver
import time
  
driver = webdriver.Firefox()
# Open a new window
driver.execute_script("window.open('');")
time.sleep(5)
# Switch to the new window since the focus would still be on the old window
driver.switch_to.window(driver.window_handles[1])
time.sleep(5)
# close the active tab
driver.close()
time.sleep(5)
# Switch back to the first tab
driver.switch_to.window(driver.window_handles[0])
driver.get("https://www.yahoo.com")
time.sleep(5)
# Close the only tab, will also close the browser.
#driver.close()

Selenium Tip # 13 — Работа с выпадающим меню на странице

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

  • select_by_index (desired_index_value)
  • select_by_visible_text ( «text_to_be_selected_from_drop_down_menu»)
  • select_by_value (значение)

Мы будем использовать http://demos.dojotoolkit.org/dijit/tests/test_Menu.html для автоматизации тестирования Selenium по этому требованию. Прежде чем выбрать нужный элемент в раскрывающемся меню, важно получить идентификатор тестируемого элемента. Мы используем метод find_element_by_xpath, чтобы найти элемент, и как только мы находим элемент (используя идентификатор), мы выбираем значение из выпадающего меню.

Selenium WebDriver

В приведенном ниже примере мы показали различные методы, с помощью которых вы можете выбрать элемент из меню ( @ aria-label = ‘select’ )

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from time import sleep
from selenium.common.exceptions import NoSuchElementException
from pip._vendor.distlib import resources
  
driver = webdriver.Firefox()
  
''' Let the page load completely '''
sleep(5)
  
try:
    ''' You can derive these details by using Web Inspector '''
    select_element = Select(driver.find_element_by_xpath("//select[@aria-label='select']"))
    # Option 1 - Selecting the drop-down item by using the text
    select_element.select_by_visible_text("bleed through")
    sleep(5)
    # Option 2 - Selecting the drop-down item by using the index value
    select_element.select_by_index(0)
    sleep(5)
    # Option 3 - Selection of desired option using value
    ''' This option would fail since there is no value in the page
     which we are testing right now '''
    # select_element.select_by_value('2')
except NoSuchElementException:
    print("Element not found")
  
''' Addition of delay so that we can have a look at the output '''
sleep(5)
  
''' Release the resources '''
driver.quit()

Selenium Совет № 14 — Обработка операций с флажками

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

Мы будем использовать http://demos.dojotoolkit.org/dijit/tests/form/test_CheckBox.html для тестирования автоматизации Selenium, и необходимо установить флажок, значение которого равно cb7: normal. Соответствие выполняется с помощью driver.find_elements_by_xpath («// * [содержит (текст (),« текст для поиска »)]»).

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from time import sleep
from selenium.common.exceptions import NoSuchElementException
from pip._vendor.distlib import resources
  
driver = webdriver.Firefox()
  
''' Let the page load completely '''
sleep(20)
  
try:
    ''' You can derive these details by using Web Inspector '''
    driver.find_element_by_xpath("//*[contains(text(), 'cb7: normal checkbox')]").click()
except NoSuchElementException:
    print("Element not found")
  
''' Addition of delay so that we can have a look at the output '''
sleep(5)
  
''' Release the resources '''
driver.quit()

Selenium Tip # 15 — Выбор элемента с помощью CSS-селектора

Существует условие для размещения элементов на веб-странице с использованием локатора CSS при выполнении автоматизации тестирования с Selenium. find_elements_by_css_selector может использоваться для определения местоположения элементов, где детали элемента (метка, ссылка, идентификатор и т. д.) должны быть переданы в качестве входного аргумента. Он находит список элементов в дочерних элементах этого элемента с помощью CSS Selector.

Цель состоит в том, чтобы найти кнопку «Вход» на https://lambdatest.com/ с помощью find_elements_by_css_selector и выполнить операцию щелчка. Код, связанный с логином ниже. Снимок инструмента проверки кода также дает необходимую информацию.

1
2
3
4
5
6
7
<html>
........
<li class="login">
<a href="https://accounts.lambdatest.com/register">Free Sign Up</a>
</li>
.....
</html>
Selenium WebDriver

Следовательно, мы передаем li.login в качестве аргумента find_element_by_css_selector и, как только он находит элемент, выполняется операция Click.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from selenium import webdriver
from selenium.webdriver.support.ui import Select
from time import sleep
from selenium.common.exceptions import NoSuchElementException
from pip._vendor.distlib import resources
  
driver = webdriver.Firefox()
  
''' Let the page load completely '''
sleep(20)
  
try:
    ''' You can derive these details by using Web Inspector '''
    driver.find_element_by_css_selector("li.login").click()
except NoSuchElementException:
    print("Element not found")
  
''' Addition of delay so that we can have a look at the output '''
sleep(5)
  
''' Release the resources '''
driver.quit()

Не забудьте прочитать нашу всеобъемлющую статью об использовании CSS селекторов для автоматизации тестирования с Selenium.

Selenium Tip # 16 — Явное ожидание обработки разных сценариев

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

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

В приведенном ниже примере мы ожидаем загрузки link_text ‘Sitemap’ на странице, и время ожидания указывается в методе WebDriverWait . Если элемент не загружен в течение времени ожидания, мы выдаем исключение.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from pip._vendor.distlib import resources
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
  
driver = webdriver.Firefox()
timeout = 10
  
try:
    ''' We wait till the time link with text SITEMAP is loaded '''
    ''' If that link text is not present on the page, it gives a time out '''
    ''' Try replacing Sitemap with Sitemap123 and you can encounter a timeout '''
    element_present = EC.presence_of_element_located((By.LINK_TEXT, 'Sitemap'))
    WebDriverWait(driver, timeout).until(element_present)
except TimeoutException:
    print("Timed out while waiting for page to load")
driver.quit()
1
Selenium Tip #17 – Scroll Operations In A Web Page

У вас может возникнуть требование, когда вам нужно выполнить операцию прокрутки вверх / вниз на странице при выполнении автоматизации тестирования с помощью Selenium. Вы можете добиться того же, используя execute_script с JS-кодом window.scrollTo в качестве аргумента. В приведенном ниже примере мы прокручиваем до конца страницы после загрузки тестируемого веб-сайта.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
from selenium import webdriver
from time import sleep
  
driver = webdriver.Firefox()
timeout = 10
  
''' Scroll to the end of the page '''
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
  
''' Sleep is added so that you can have a look at the output '''
sleep(10)
  
''' Scroll again to the top of the page '''
driver.execute_script("window.scroll(0, 0);")
  
sleep(10)
driver.quit()

Selenium Tip # 18 — Увеличение и уменьшение с помощью Selenium

Чтобы увеличить или уменьшить масштаб при тестировании автоматизации Selenium, вы должны использовать CSS-свойство transform (для соответствующего браузера), которое позволяет выполнять операции увеличения, уменьшения, поворота, перекоса и т. Д. На странице.

Параметры CSS для разных типов браузеров приведены ниже.

Selenium WebDriver

В приведенном ниже примере мы уменьшаем веб-страницу, загруженную в браузер, на 200%, а затем увеличиваем на 100% (т. Е. Возвращаемся в нормальное состояние). Поскольку мы используем браузер Firefox, мы использовали свойство CSS MozTransform.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from selenium import webdriver
from time import sleep
  
driver = webdriver.Firefox()
timeout = 10
  
''' Zoom in by 200% '''
driver.execute_script('document.body.style.MozTransform = "scale(2.0)";')
driver.execute_script('document.body.style.MozTransformOrigin = "0 0";')
  
sleep(10)
  
''' Zoom out by 100% '''
  
driver.execute_script('document.body.style.MozTransform = "scale(1.0)";')
driver.execute_script('document.body.style.MozTransformOrigin = "0 0";')
  
''' Sleep is added so that you can have a look at the output '''
sleep(10)
  
''' Release all the resources '''
driver.quit()

Selenium Tip # 19 — найдите размер элемента на веб-странице

Сначала необходимо выполнить поиск элемента по идентификатору, а затем использовать свойство .size для расчета размера искомого элемента. В следующем примере мы вычисляем размер кнопки create_programmatic_menu (ID = createDestoryButton) на странице http://demos.dojotoolkit.org/dijit/tests/test_Menu.html.

Selenium WebDriver
01
02
03
04
05
06
07
08
09
10
11
12
13
from selenium import webdriver
from time import sleep
  
driver = webdriver.Firefox()
timeout = 10
  
search_element = driver.find_element_by_id("createDestroyButton")
  
print(search_element.size)
  
''' Release all the resources '''
driver.quit()

Когда вы выполните приведенный выше код, он выведет размер кнопки (ID — CreateDestroyButton).

Selenium WebDriver

Selenium Tip # 20 — Получить X & Y координаты элемента на веб-странице

Вы должны следовать аналогичному подходу, который вы использовали для расчета размера элемента. Сначала необходимо выполнить поиск элемента по идентификатору, а затем использовать свойство .location для расчета координат X и Y искомого элемента.

URL-адрес теста: http://demos.dojotoolkit.org/dijit/tests/test_Menu.html, и мы рассчитываем координаты X & Y кнопки create_programmatic_menu (ID = createDestoryButton)

01
02
03
04
05
06
07
08
09
10
11
12
13
from selenium import webdriver
from time import sleep
  
driver = webdriver.Firefox()
timeout = 10
  
search_element = driver.find_element_by_id("createDestroyButton")
  
print(search_element.location)
  
''' Release all the resources '''
driver.quit()

Когда вы выполните приведенный выше код, он выведет X, Y координаты e кнопки (ID — CreateDestroyButton).

Selenium WebDriver

Selenium Совет № 21 — отключить JavaScript с помощью пользовательского профиля

В случае, если вы хотите отключить поддержку JavaScript в браузере для проверки автоматической кросс-браузерной совместимости с тестированием автоматизации Selenium, вам нужно изменить настройки профиля тестируемого браузера (в нашем случае это Firefox) и применить изменения к профилю. , Мы используем DEFAULT_PREFERENCES [‘frozen’] [‘javascript.enabled’] = False, чтобы отключить поддержку JavaScript для браузера.

После выполнения кода вы должны проверить изменения профиля, набрав about: config в адресной строке и выполнив поиск значения свойства javascript.enabled.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
from selenium import webdriver
  
''' Since we have the geckodriver & Firefox browser in same location '''
''' We do not pass the location of the Firefox profile '''
ff_profile = webdriver.FirefoxProfile()
  
ff_profile.DEFAULT_PREFERENCES['frozen']['javascript.enabled'] = False
ff_profile.set_preference("app.update.auto", False)
ff_profile.set_preference("app.update.enabled", False)
  
''' Update the preferences '''
ff_profile.update_preferences()
  
''' Load the Firefox browser with the updated profile '''
driver = webdriver.Firefox(ff_profile)
  
''' Verify whether the changes are working fine or not '''
driver.get("about:config")

Ниже приведен скриншот с настройками about: config (после выполнения кода) в Firefox.

Selenium WebDriver

Selenium Tip # 22 — Настройка параметров прокси вручную

В некоторых случаях вы можете изменить настройки прокси-сервера для выполнения ваших тестов. Для изменения настроек прокси вам необходимо сначала импортировать модуль selenium.webdriver.common.proxy . Вы должны установить тип прокси на MANUAL , после чего вы измените настройки прокси и примените новые настройки к тестируемому браузеру (в нашем случае это Firefox).

Вам нужно заменить ip_address & port_number на IP-адрес и номер порта, который вы планируете использовать для тестирования.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
  
proxy_settings = Proxy()
  
''' The proxy settings are first changed to Manual '''
proxy_settings.proxy_type = ProxyType.MANUAL
  
''' Replace ip_address with Proxy IP address and '''
''' port_number with the port number which you plan to use '''
proxy_settings.http_proxy = "ip_address:port_number"
proxy_settings.socks_proxy = "ip_address:port_number"
proxy_settings.ssl_proxy = "ip_address:port_number"
  
''' You can add capabilties for different browsers & devices '''
capabilities = webdriver.DesiredCapabilities.FIREFOX
proxy_settings.add_to_capabilities(capabilities)
  
driver = webdriver.Firefox(desired_capabilities=capabilities)

Вывод

Мы рассмотрели большинство советов Selenium, чтобы помочь вам выполнить автоматизацию тестирования с Selenium как профессионал. Хотя вы можете проверить свой веб-сайт / веб-приложение в различных браузерах, устройствах и операционных системах, используя локальный компьютер, объем тестирования будет ограничен, поскольку вы не можете охватить весь спектр устройств + операционные системы + браузеры (и версии браузера) , Именно здесь вы должны использовать эти советы и рекомендации для проведения автоматического кросс-браузерного тестирования вашего веб-сайта / веб-приложения.

Вы должны внести минимальные изменения, чтобы переместить свой локальный тестовый код автоматизации Selenium в облачную Selenium Grid LambdaTest, поскольку вы начинаете расширять свой охват тестированием, тестируя свое веб-приложение на более чем 2000 реальных комбинациях браузеров + ОС + устройств. Вы также получаете интеграции с многочисленными инструментами CI CD, инструментами управления проектами и многим другим.

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

Опубликовано на Java Code Geeks с разрешения Химаншу Сета, партнера нашей программы JCG . Смотрите оригинальную статью здесь: 22 практических советов по тестированию автоматизации с Selenium WebDriver

Мнения, высказанные участниками Java Code Geeks, являются их собственными.