Python - отправка экземпляра селена Chrome в фоновом режиме - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь открыть простой экземпляр Chrome, используя Python и selenium.Пожалуйста, найдите мой код ниже:

import time, datetime, sys, os
start_time = time.time()
from datetime import datetime
os.system("cls")
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options

CHROME_PATH = 'C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'
CHROMEDRIVER_PATH = 'C:\\Users\\'+userID+'\\'+filename+'\\chromedriver.exe'
WINDOW_SIZE = "1920,1080"

chrome_options = Options()  
chrome_options.add_argument("--window-size=%s" % WINDOW_SIZE)
chrome_options.add_argument("disable-gpu")
chrome_options.add_argument("disable-infobars")
chrome_options.add_argument("--disable-notifications")
chrome_options.binary_location = CHROME_PATH

browser = webdriver.Chrome(executable_path=CHROMEDRIVER_PATH,chrome_options=chrome_options)
time.sleep(1)
browser.get("https://www.google.com")
os.system("cls")
time.sleep(2)

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

Ограничения: Обратите внимание на следующие ограничения:

  1. Я не могу использовать "--headless"
  2. Я не могу использовать phantomJS
  3. Я могуне использовать PyVirtualDisplay, поскольку код (exe-файл) будет в конечном итоге развернут на компьютерах с ОС Windows для конечных пользователей.

Есть ли другой способ перенести этот экземпляр Chrome в фоновый режим?Спасибо

1 Ответ

0 голосов
/ 10 октября 2018

Существует нет программного способа открытия в клиенте браузера в фоновом режиме или в виде фонового процесса .

Грубый альтернативный способ - использовать Безголовый браузер , подробное обсуждение которого можно найти в Какие драйверы поддерживают тестирование без браузера / без головы? .

Почему невозможно?

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

  • Настроена со всеми необходимыми программами , библиотеками и двоичными файлами .
  • Выполнение теста должно выполняться в контролируемой среде для оптимизированной производительности.
  • Во время выполнения @Tests должно быть свободно от Вмешательство вручную .
  • Особенно, когда ваши @Tests основаны на Selenium , в то время как выполнение теста равно InProgress TestОкружение не должно вмешиваться по следующим причинам:

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

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

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

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

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

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

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

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

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

Заключение

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

...