Способ открыть браузер Selenium, не перекрывающий мой текущий браузер

У меня следующая ситуация. как только я начну тест Selenium, откроется окно браузера. Поскольку у меня есть куча тестов, и я запускаю их много раз каждый день, я бы не позволил Selenium открывать новое окно браузера в передней части моего текущего браузера (в котором я работаю), а только в фоновом режиме, поэтому он не будет ' не беспокоить меня. Является ли это возможным?

PS, чтобы прояснить, зачем мне это нужно - много раз в день, когда я работаю в текущем браузере и выполняются тесты на селен, окна браузера из Selenium открываются для каждого теста. просто внезапно и я могу его внезапно закрыть, что-то напечатать и т. д.

Что у меня сейчас:

img


person Andrei Suvorkov    schedule 04.09.2018    source источник
comment
Мне все еще непонятен ваш вариант использования.   -  person cruisepandey    schedule 04.09.2018
comment
@cruisepandey Я хочу запустить тесты, чтобы окно браузера Selenium открывалось не в передней части окна моего браузера, а как-то в фоновом режиме   -  person Andrei Suvorkov    schedule 04.09.2018
comment
В качестве обходного пути попробуйте что-нибудь вроде driver.manage().window().setPosition(newPoint(0, 2000)); (не уверен в правильности синтаксиса Java). Также проверьте ​​это   -  person Andersson    schedule 04.09.2018
comment
ИМО, это невозможно. Потому что, когда вы делаете это вручную, новые окна браузера открываются перед текущим окном. Хотя вы можете запустить хром увеличенного размера, но я вижу, что это не ваш вариант использования.   -  person cruisepandey    schedule 04.09.2018
comment
Это не проблема, вы можете использовать решение @Andersson   -  person iamsankalp89    schedule 04.09.2018
comment
@Andersson driver.manage().window().setPosition(newPoint(0, 2000));, это лучше, чем сейчас, но все равно окно открывается поверх всех окон, открытых до этого, и только потом исчезает. Спасибо за ссылку. Думаю, буду использовать --headless режим, даже если это не совсем то, что мне нужно. Большое спасибо!   -  person Andrei Suvorkov    schedule 04.09.2018


Ответы (2)


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

  • Настроен со всем необходимым программным обеспечением, библиотеками и двоичными файлами.
  • Выполнение теста должно выполняться в контролируемой среде для оптимизации производительности.
  • Пока ваш @Tests выполняется, он не должен подвергаться ручному вмешательству.
  • В частности, когда ваши @Tests основаны на Selenium, а выполнение теста - In Progress, не следует вмешиваться в Test Environment. потому что:

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

  • Кроме того,

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

    • # P6 #
  • Кроме того,

  • Наконец, согласно Internet Explorer и собственные события:

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

  • Ориентация на браузер:

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

    • # P13 #
    • # P14 #

Заключение

Всегда храните среду тестирования отдельно от среды разработки и не допускайте ручного вмешательства.

person DebanjanB    schedule 04.09.2018
comment
Спасибо за ваш ответ! В этом есть смысл. В идеале мне нужно использовать отдельный сервер для запуска моих тестов. - person Andrei Suvorkov; 04.09.2018
comment
@DebanajanB будет проблемой, если я сверну браузер, когда он появится. будет ли мой тест работать в обязательном порядке? - person jsduniya; 17.02.2020
comment
@jsduniya Я перечислил все воздействия в отношении класса Action, кликов, Native Events и Mouse Events в отдельные разделы. Пожалуйста, ответьте один раз и дайте мне знать, если возникнут вопросы. - person DebanjanB; 17.02.2020
comment
@DebanjanB Спасибо, мне трудно найти мою проблему в этих деталях, мой вопрос в том, что даже сворачивание окна браузера повлияет на мои тестовые примеры? Поскольку я не выполняю никаких операций с событиями в окне просмотра браузера, в котором запущен тестовый пример, я просто нажимаю значок свертывания (-) браузера. - person jsduniya; 17.02.2020
comment
@jsduniya Я добавил еще одну каноническую повторяющуюся цель. Дайте знать, если у вас появятся вопросы. - person DebanjanB; 17.02.2020
comment
@DebanjanB Я тоже поддержал этот ответ, спасибо, что решили мою проблему. - person jsduniya; 17.02.2020

Отображение браузера поверх текущего браузера или в фоновом режиме зависит от реализации драйвера и меняется от браузера к браузеру - это не зависит от Selenium или Serenity. Однако я обычно запускаю тесты в Chrome в безголовом режиме, что полностью устраняет проблему.

person John Smart    schedule 05.09.2018