Selenium — мощный инструмент автоматического тестирования, который широко используется для тестирования веб-приложений. С выпуском Selenium 4 появилось множество новых функций и улучшений, которые упрощают написание и поддержку сценариев автоматизации. В этой статье будут подробно рассмотрены некоторые ключевые новые функции Selenium 4, в частности, относительные локаторы, а также некоторые другие важные нововведения.
На веб-страницах иногда бывает сложно найти элементы напрямую по идентификатору, имени класса или селектору CSS, особенно в динамически генерируемом контенте. Чтобы решить эту проблему, в Selenium 4 были представлены реляционные локаторы, позволяющие разработчикам находить целевые элементы на основе других элементов на странице.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.relative_locator import locate_with
driver = webdriver.Chrome()
driver.get("http://example.com")
sign_in_button = driver.find_element(By.ID, "signin-button")
search_input = driver.find_element(locate_with(By.TAG_NAME, "input").to_right_of(sign_in_button))
print(search_input.get_attribute("id")) # Распечатайте атрибут ID поля ввода.
В этом примере мы сначала находим кнопку «Войти», а затем используем локатор to_right_of, чтобы найти поле ввода справа от нее.
Selenium 4 теперь по умолчанию использует протокол W3C WebDriver, что вносит некоторые базовые изменения и улучшает совместимость с современными браузерами. Например, API-интерфейсы Capabilities и Actions были обновлены в соответствии со стандартами W3C.
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
capabilities = DesiredCapabilities.CHROME.copy()
capabilities['goog:chromeOptions'] = {
'args': ['--headless', '--disable-gpu']
}
driver = webdriver.Chrome(desired_capabilities=capabilities)
driver.get("http://example.com")
print(driver.title)
driver.quit()
Здесь мы указали параметры Chrome и включили безгласный режим.
До Selenium 4 переключение на новое открытое окно браузера могло быть затруднительным. Selenium 4 теперь обеспечивает более чистый способ обработки новых окон.
from selenium import webdriver
from selenium.webdriver.common.by import By
driver = webdriver.Chrome()
driver.get("http://example.com")
driver.execute_script("window.open('');")
driver.switch_to.window(driver.window_handles[1]) # Переключиться на новую вкладку
driver.get("http://another-example.com") # Загрузить другой сайт в новой вкладке
print(driver.title) # Распечатать заголовок новой страницы
driver.close() # Закрыть текущую вкладку
driver.switch_to.window(driver.window_handles[0]) # Вернуться к исходной вкладке
Этот код показывает, как открывать новые окна и переключаться между ними.
В Selenium 4 также добавлена поддержка протокола Chrome DevTools, что означает, что разработчики могут напрямую взаимодействовать с внутренними механизмами браузера для получения данных о производительности, информации о сетевых запросах и т. д.
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.common.by import By
import json
options = webdriver.ChromeOptions()
service = ChromeService(executable_path='/path/to/chromedriver')
driver = webdriver.Chrome(service=service, options=options)
# Включить ведение журнала производительности
capabilities = options.to_capabilities()
capabilities['goog:loggingPrefs'] = {
'performance': 'ALL'}
driver = webdriver.Chrome(service=service, desired_capabilities=capabilities)
driver.get("http://example.com")
# Получить все записи журнала производительности
logs = driver.get_log('performance')
for log in logs:
message = json.loads(log["message"])["message"]
if "Network.response" in message["method"]:
print(f"Response received: {message['params']['response']['url']}")
driver.quit()
В этом примере показано, как включить ведение журнала производительности и извлечь из этих журналов информацию об ответах сети.
Selenium 4 содержит множество новых интересных функций, таких как локаторы ассоциаций, улучшенную поддержку стандартов WebDriver W3C, новую обработку окон и поддержку протокола Chrome DevTools. Эти улучшения не только упрощают написание тестовых сценариев, но также обеспечивают больший контроль и гибкость. Для любой команды, стремящейся повысить эффективность и надежность автоматического тестирования, стоит рассмотреть возможность обновления до Selenium 4.
Используя приведенные выше примеры, вы сможете начать изучать новые функции Selenium 4 и применять их в своих проектах. Имея больше практики и опыта, вы сможете и дальше использовать потенциал этих функций для создания более эффективных и мощных решений по автоматизации.
Помимо Selenium, есть несколько однородных инструментов, которые также можно использовать для внешнего тестирования. Вот несколько распространенных альтернатив:
1.Cypress:
2.Playwright:
3.Puppeteer:
4.Katalon Studio:
У каждого из этих инструментов есть преимущества и недостатки, и тестировщики могут выбрать подходящий инструмент для фронтенд-тестирования, исходя из потребностей проекта и уровня навыков команды. При выборе инструмента необходимо учитывать такие факторы, как простота использования, комплексная функциональность, стабильность производительности и интеграция с другими инструментами.