Webdriver.io/Selenium тесты завершаются неудачей, когда окно находится в фоновом режиме в Chrome 87

#node.js #selenium-webdriver #webdriver #webdriver-io

#node.js #selenium-webdriver #webdriver #webdriver-io

Вопрос:

Я только что обновился до последней версии Chrome 87. Мой Webdriver.io/Selenium тесты раньше выполнялись нормально, независимо от того, находилось ли окно Chrome на переднем плане или на заднем плане. Теперь, после обновления, тесты проходят, если окно находится на переднем плане, но не если оно находится в фоновом режиме.

Я не сворачиваю окно Chrome, в котором выполняются мои тесты. Я просто нажимаю Alt Tab, чтобы моя среда разработки находилась перед Chrome, а она — позади.

Я знаю, что в Chrome 87 есть новая «функция», в которой он использует меньше процессора, если он не находится на переднем плане. Есть ли способ отключить это с помощью настроек Chrome или Chromedriver?

Кажется, что мой тест находит кнопку для нажатия, но Chrome не регистрирует щелчок.

Ответ №1:

Это ошибка в Chrome 87:

https://bugs.chromium.org/p/chromedriver/issues/detail?id=3641amp;sort=-id

Обходной путь

Узел JS

Обходным путем является установка «LocalState» в Webdriver.io это desiredCapabilities похоже на приведенное ниже в Node.JS/Chimpy:

 chimpOptions.webdriverio.desiredCapabilities = {
  chromeOptions: {
    args: ["--no-sandbox", ...],
    prefs: {...}
    },
    localState: {
      "browser.enabled_labs_experiments": ["calculate-native-win-occlusion@2"],
    },
  },
  ...
};
 

Java

 ChromeOptions options = new ChromeOptions();
   
HashMap<String, Object> chromeLocalStatePrefs = new HashMap<String, Object>();
List<String> experimentalFlags = new ArrayList<String>();
experimentalFlags.add("calculate-native-win-occlusion@2");
chromeLocalStatePrefs.put("browser.enabled_labs_experiments", experimentalFlags);
options.setExperimentalOption("localState", chromeLocalStatePrefs);
 

Предыдущий ответ

Другой обходной путь — оставить небольшой выступ фонового окна Chrome под вашим активным браузером / IDE / etc.

На изображении ниже вы можете увидеть небольшое количество окна Chrome, в котором выполняется тест.

введите описание изображения здесь

Ответ №2:

последняя версия chrome — chromedriver решила эту проблему введите описание изображения здесь

Ответ №3:

На данный момент вы можете использовать это обходное решение:

  1. Загрузите предыдущую версию Chrome. Это для версии 81: https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Win/735601 /
  2. Укажите прямой путь к chrome.exe исполняемый файл через параметр «chrome_binary»:
 java -jar selenium-server-standalone-3.141.59.jar -role node -hub http://192.168.88.42:4444/grid/register -browser browserName=chrome,platform=ANY,maxInstances=60,seleniumProtocol=WebDriver,applicationName=test4,chrome_binary=C:UsersPCDownloadsWin_735601_chrome-winchrome-winchrome.exe -maxSession 60
 
  1. Наслаждайтесь использованием более старой версии Chrome.

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

1. Как мне найти версию 86?

Ответ №4:

Я использую C # и сталкиваюсь с той же проблемой. Я добавил обходной путь, добавив окно сворачивания и разворачивания, как показано ниже. Обычно мы указываем заголовок страницы, поэтому переключение на окно привлекает внимание, а другие тестовые действия выполняются. ниже приведен обходной путь для создания сбоя скриншота.

 private void MinMaxWindow(ChromeDriver driver)
{
        driver.Manage().Window.Minimize();
        driver.Manage().Window.Maximize();
}
 

Редактировать,
Разработчик предоставил обходной путь, как показано ниже.

Java

  ChromeOptions options = new ChromeOptions();   
    HashMap<String, Object> chromeLocalStatePrefs = new HashMap<String, Object>();
    List<String> experimentalFlags = new ArrayList<String>();
    experimentalFlags.add("calculate-native-win-occlusion@2");
    chromeLocalStatePrefs.put("browser.enabled_labs_experiments", experimentalFlags);
    options.setExperimentalOption("localState", chromeLocalStatePrefs);
 

Python

 chrome_options = webdriver.ChromeOptions()
    experimentalFlags = ['calculate-native-win-occlusion@2']
    chromeLocalStatePrefs = { 'browser.enabled_labs_experiments' : experimentalFlags}
    chrome_options.add_experimental_option('localState',chromeLocalStatePrefs);
 

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

1. Я получил повтор от разработчика в bugs.chromium.org/p/chromedriver/issues/detail?id=3657#c12 Параметры ChromeOptions = новые параметры ChromeOptions(); параметры. Добавьте localstatepreference(«browser», new { enabled_labs_experiments = новая строка[] { «вычислить-native-win-occlusion@2» } });

2. Это здорово, но не могли бы вы добавить эквивалент C #?

3. Параметры ChromeOptions = новые параметры ChromeOptions();. Добавьте localstatepreference(«browser», new { enabled_labs_experiments = новая строка[] { «вычислить-native-win-occlusion@2» } });

Ответ №5:

ChromeOptions.addArguments(«—disable-backgrounding-occluded-windows»);

Я столкнулся с той же проблемой после обновления до Chrome 87 и Chrome driver 87.

Найдено исправление здесь: https://support.google.com/chrome/thread/83911899?hl=en