Страницы

Поиск по вопросам

среда, 4 марта 2020 г.

Selenium. Всплывание окна на передний фон

#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 версии хрома).

Комментариев нет:

Отправить комментарий