Я предлагаю самое простое решение этой проблемы, и хоть исходный код будет на C#, сам подход можно реализовать для любого языка программирования.
Это подмена ответа на запрос создания новой сессии от сервера Webdriver.
Тем самым Webdriver-клиент будет получать всегда одну и ту же сессию от Webdriver-сервера, следовательно, работать с уже открытым браузером.
А редактировать код можно в так называемой «песочнице» – отдельным методе, где вызывается только проблемный участок. Этот код из «песочницы» вы потом можете перенести в тест-кейс.
Способ подмены сессии от Webdriver-сервера
В самом начале, давайте запустим Селениум сервер:start java -jar selenium-server-standalone-2.33.0.jarСервер запущен на локальной машине, но с localhost’ом Fiddler работает не очень хорошо «из коробки» и требует предварительной настройки, поэтому, обращаться к серверу мы будет по имени моего компьютера – dz, а стандартным портом будет 4444.
Это обычное консольное приложение:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using OpenQA.Selenium.Remote; namespace FakingDriver { class Program { static void Main(string[] args) { GlobalProxySelection.Select = new WebProxy("127.0.0.1", 8888); var wdServerUrl = new Uri("http://dz:4444/wd/hub"); var caps = DesiredCapabilities.Firefox(); var driver = new RemoteWebDriver(wdServerUrl, caps); driver.Navigate().GoToUrl("http://blog.zhariy.com"); } } }
Единственная необычная строчка тут – это:
GlobalProxySelection.Select = new WebProxy("127.0.0.1", 8888);
Именно она позволяет перенаправить все HTTP запросы в .NET приложении через прокси-сервер (Fiddler).
Теперь время открыть Fiddler и настроить его на фильтрацию запросов только к Селениум-серверу. Для этого на вкладке Filter добавляем в Show only if URL contains – dz:4444.
Этот шаг необязателен, но позволит избавиться от лишнего «мусора».
Теперь запускаем наше приложение, и наблюдаем за тем, какие запросы оно делает.
Как и ожидалось, самый первый запрос и был на получение новой сессии.
И воспользуемся магией Autoresponder, и добавим запрос в список. Тут очень важно не только включить Enable automatic responses, но и галочку Unmatched requests passthrough.
Это все. Теперь строка кода
var driver = new RemoteWebDriver(wdServerUrl, caps);
Всегда будет получать одну и ту же сессию открытого браузера.
Комментариев нет:
Отправить комментарий