Как ScrollIntoView, когда браузер свернут с помощью Selenium и C # - PullRequest
0 голосов
/ 10 марта 2019

как прокрутить до элементов, когда мой браузер свернут?

В настоящее время у меня есть этот код:

IWebElement scrollnextpage = driver.FindElement(By.XPath("//a[" + x + "][contains(@class, 'paged-nav-item')]"));
                                    js.ExecuteScript("arguments[0].scrollIntoView({behavior: 'smooth', block: 'center'});", scrollnextpage);

Это работает нормально, но когда я сверну свой браузер, он перестает работать. Какие-нибудь решения?

1 Ответ

0 голосов
/ 10 марта 2019

Отвечая прямо, браузерный клиент не должен сохраняться свернутым , пока вы запускаете выполнение теста .Когда вы используете Selenium для выполнения вашей программы / сценария, Selenium требуется focus на клиенте Browser , который отображает HTMLDOM .

Почему нельзя свернуть браузер?

Автоматизация тестирования программного обеспечения - это искусство. Выполнение теста должно выполняться в контролируемой среде для оптимизированной производительности.

  • Особенно, когда ваши @Tests основаны на Селене , Выполнение теста должно проводиться с максимальным увеличением Viewport по следующим причинам:

    • На самом низком уровне поведение actions класса предназначен для максимально точного воспроизведения поведения удаленного конца с фактическим устройством ввода, и стратегия реализации может включать, например, введение синтезированных событий в цикл событий браузера.Следовательно, шаги по отправке действия неизбежно окажутся на конкретной территории реализации.Однако существуют определенные наблюдаемые эффекты содержимого, которые должны быть согласованы между реализациями.Чтобы учесть это, в спецификации требуется, чтобы удаленные стороны выполняли специфичные для реализации шаги диспетчеризации действий, а также список событий и их свойств.Этот список не является исчерпывающим;в частности, действие по умолчанию для источника ввода может вызвать генерацию дополнительных событий в зависимости от реализации и состояния браузера (например, события ввода, относящиеся к ключевым действиям, когда фокус находится на редактируемом элементе, события прокрутки и т. д.).
  • Более того,

    • Триггер активации, сгенерированный пользователем API WebDriver, должен быть неотличим от триггеров, сгенерированных взаимодействующим с реальным пользователемс браузером.В частности, отправленные события будут иметь атрибут isTrusted со значением true.Самый надежный способ отправить эти события - создать их в самой реализации браузера.Отправка входных сообщений, специфичных для ОС, в окно браузера имеет недостаток, заключающийся в том, что автоматизируемый браузер может быть неправильно изолирован от случайного изменения пользователем состояния источника ввода.Использование API доступа на уровне операционной системы имеет тот недостаток, что окно браузера должно быть сфокусировано, и в результате несколько экземпляров WebDriver не могут работать параллельно.

    • Преимущество ОС -Уровень доступности API заключается в том, что он гарантирует, что входные данные корректно отражают пользовательский ввод, и позволяет взаимодействовать с хост-ОС при необходимости.Однако это может привести к снижению производительности с точки зрения использования машины.

  • Дополнительно

    • Класс робота используется для генерации собственных событий системного ввода для целей автоматизации тестирования, самостоятельных демонстраций и других приложений, где необходимо управление мышью и клавиатурой.Основная цель Robot - облегчить автоматизированное тестирование реализаций платформы Java.Использование класса для генерации входных событий отличается от публикации событий в очереди событий AWT или компонентах AWT тем, что события генерируются в собственной входной очереди платформы.Например, Robot.mouseMove будет фактически перемещать курсор мыши, а не просто генерировать события перемещения мыши.
  • Наконец, согласно Internet Explorer и Native Events :

    • Поскольку InternetExplorerDriver предназначен только для Windows, он пытается использовать так называемые «собственные» события или события на уровне ОС для выполнения операций мыши и клавиатуры в браузере. Это отличается от использования смоделированных событий JavaScript для одних и тех же операций. Преимущество использования собственных событий состоит в том, что они не зависят от песочницы JavaScript и обеспечивают правильное распространение событий JavaScript в браузере. Однако в настоящее время существуют некоторые проблемы с событиями мыши, когда окно браузера IE не имеет фокуса и при попытке навести курсор на элементы.
  • Фокус браузера:

    • Проблема в том, что сам IE, похоже, не полностью соблюдает сообщения Windows, которые мы отправляем в окно браузера IE (WM_MOUSEDOWN и WM_MOUSEUP), если окно не имеет фокуса. В частности, элемент, по которому щелкают, получит окно фокусировки вокруг него, но элемент не будет обрабатывать щелчок. Возможно, мы не должны отправлять сообщения вообще; скорее, мы должны использовать API SendInput (), но этот API явно требует, чтобы окно имело фокус. У нас есть две противоречивые цели с проектом WebDriver.

    • Во-первых, мы стремимся подражать пользователю как можно ближе. Это означает использование собственных событий вместо симуляции событий с использованием JavaScript.

    • Во-вторых, мы не хотим, чтобы фокус окна браузера был автоматизирован. Это означает, что простое перемещение окна браузера на передний план является неоптимальным.

Заключение

Всегда держите Браузер развернутым при запуске выполнения теста .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...