Я был недавно поручено автоматизировать новую обертку входа в систему нашего продукта. Это связано с ударом страницы пользовательского интерфейса сервера, перенаправляя на страницу входа в систему и проверяя, если вход в систему добится успеха или не удается. Другое требование было иметь возможность управлять тестами в трубопроводах Azure DevOps.
Я, как правило, не парень автоматизации пользовательского интерфейса, я обычно сосредоточен на API и коде отдыха в C #. Так что я начал с Selenium C #. Хотя было достаточно легко автоматизировать шаги входа в систему, я немедленно заблокировал, когда обнаружил, что мне нужно поддерживать заголовки хоста, чтобы запустить тесты в среде Kubernetes (K8S). Ну, селен из коробки не поддерживает заголовки хоста …
Я смотрел в поисках возможных решений и лучший, который я нашел далеко, был Seleniumwire Отказ Seleniumwire поддерживает доступ к основным запросам/ответам. Вы можете изменить их и получать и получать коды ответов HTTP. Я чувствовал, что я вернулся в моем мире тестирования API! Единственное отличие было, что Seleniumwire только поддерживает Python, а не C #. Но мне пришлось иметь функциональность Seleniumwire, даже если мои навыки Python были несколько нообами.
Посмотрим, как легко установить заголовок хоста с Seleniumwire
import pytest from seleniumwire import webdriver def test_isAlive(url, hostheader): web_driver = webdriver.Chrome() web_driver.maximize_window() # check to set host header if hostheader != 'none': web_driver.header_overrides = {'Host' : hostheader} isAliveUrl = '/api/isAlive' UIEndpoint = url loginURL = UIEndpoint + isAliveUrl web_driver.get(loginURL)
Теперь вышеперечисленное не весь сценарий, но вы получаете картину. Это решило огромную проблему, которая была невозможна с Selenium C #. Обратите внимание, что я проверяю значение заголовка хоста «Нет», если я не хочу использовать заголовок хоста.
Другая классная функция SeleniumWire – это захватить код ответа HTTP, который я могу использовать в утверждении, чтобы убедиться, что страница загружена. Это может быть дополнительный тест на встроенную проверку нагрузки на загрузку страницы Selenium.
# Access requests via the `requests` attribute for request in web_driver.requests: if request.response: print( request.url, request.response.status_code, request.headers ) assert request.response.status_code == 200
Эти функции Seleniumwire могут показаться незначительными, но на самом деле они на самом деле огромные помощи в автоматизации UI. Селен должен сойти с высокой «Нам нужно вести себя как браузер« Лошадь и включить эту библиотеку во всех версиях! Пока они не сделают, у меня сейчас Python Automation Guy:)
Оригинал: “https://dev.to/tswiftma/why-i-m-switching-from-c-to-python-with-selenium-2oap”