#c_sharp #selenium
Если запустить слудующий код, то при каждой итерации цикла браузер будет всплывать на передний фон и получать фокус. public class Program { private static void Main() { var driver = new ChromeDriver(); driver.Navigate().GoToUrl("https://i.imgur.com/cdA7SBB.jpg"); for (int i = 0; i < 100; i++) { var ss = ((ITakesScreenshot)driver).GetScreenshot(); ss.SaveAsFile("D:/imgs/i.jpg"); } } } Вопрос: почему так происходит и можно ли как то это выключить? headless мод не подходит. Похоже что это происходит всегда когда Selenium нужно сохранить/прочитать файл или запустить процесс. Update: Спасибо большое Florent B. за помощь в решении данного вопроса. Вот правильный ответ Selenium. Bring-up window on the front
Ответы
Ответ 1
Смею предположить, что такое поведение это необходимость при снятии скриншота. Во время обычных действий Selenium не требует активации окна. Чтобы окно браузера не мешало, можно запускать его в докере. Вот образы и краткая инструкция - https://github.com/SeleniumHQ/docker-seleniumОтвет 2
это непростая задача и ее сложно сконфигурировать "через настройки", но я могу предложить достаточно простое решение для вас. развернуть у себя docker. Инструкция для Windows машин развернуть Standalone Chrome. Более подробная инструкция тут docker run --rm -d -p 4444:4444 --name hub selenium/standalone-chrome Настроить Capacity для работы с удаленным драйвером var uri = 'uri_to_your_hub'; // в данном случае будет http://localhost:4444/wd/hub var capabilities = new ChromeOptions().ToCapabilities(); var commandTimeout = TimeSpan.FromMinutes(5); var driver = new RemoteWebDriver(new Uri(uri),capabilities,commandTimeout) Таким образом, браузер будет запускаться внутри контейнера, вы подключайтесь у нему удаленно и работаете. Вы можете перейти по ссылке http://localhost:4444/wd/hub и увидеть запущенные сеансы и даже посмотреть на скриншот конкретного сеанса. Также можно добиться того, чтобы все запустилось от имени системного пользователя. Тогда вы тоже ничего не увидите. UPDATE можно воспользоваться PhantomJSDriver. DesiredCapabilities dc = DesiredCapabilities(); dc.SetCapability("phantomjs.binary.path", "path/to/phantomjs"); var driver = = new PhantomJSDriver(ds); driver.Navigate().GoToUrl("https://i.imgur.com/cdA7SBB.jpg"); for (int i = 0; i < 100; i++) { var ss = ((ITakesScreenshot)driver).GetScreenshot(); ss.SaveAsFile("D:/imgs/i.jpg"); } UDPATE 2 webdriver иногда фокусит окно при взаимодействий. Необязательно, чтобы выполнить действия, даже если просто поищете элемент. По этой причине нет решений, чтобы тесты запускались в интерактивном режиме и при этом нет фокусились. Для этого придумали другие решения, такие как контейнеры, PhantomJS, HtmlUnit, --headless(с 59 версии хрома).
Комментариев нет:
Отправить комментарий