Webdriver.io/Selenium 当 window 在 Chrome 87 的背景中时测试失败

Webdriver.io/Selenium tests fail when the window is in the background on Chrome 87

我刚升级到最新版本 Chrome87. 我的 Webdriver。io/Selenium 测试用于 运行 没问题,不管 Chrome window 在前台或后台。现在,升级后,如果 window 在前台,测试通过,但如果在后台,则测试不通过。

我没有最小化我的测试 Chrome window 运行。我只是按 Alt+Tab,这样我的 IDE 就在 Chrome 前面,它在后面。

我知道 Chrome 87 有一个新的“功能”,如果它不在前台,它会使用更少 CPU。有没有办法通过 Chrome 或 Chrome 驱动程序设置关闭此功能?

看来我的测试是找到要点击的按钮,但 Chrome 没有注册点击。

这是 Chrome87:

中的错误

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

解决方法

节点JS

解决方法是在 Webdriver.io 的 desiredCapabilities 中设置“localState”,如下面的 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);

上一个答案

另一种解决方法是在活动 browser/IDE/etc.

下方留下一小片背景 Chrome window

在下图中,您可以看到少量的Chromewindow运行测试。

我正在使用 C# 并面临同样的问题。我通过添加最小化和最大化 window 来添加解决方法,如下所示。通常我们断言页面标题,因此切换到 window 会带来焦点,其他测试操作也会通过。下面是截图失败的解决方法。

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

编辑, Dev 给出了如下解决方法。

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. 下载Chrome的上一版本。这是 81 版的:https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Win/735601/

  2. 通过参数“chrome_binary”指定 chrome.exe 可执行文件的直接路径:

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:\Users\PC\Downloads\Win_735601_chrome-win\chrome-win\chrome.exe -maxSession 60
  1. 享受使用旧版本的 Chrome。

chromeOptions.addArguments("--disable-backgrounding-occluded-windows");

自更新到 Chrome 87 和 chrome 驱动程序 87 后,我 运行 遇到了同样的问题。

在此处找到修复: https://support.google.com/chrome/thread/83911899?hl=en

最新的 chrome - chrome驱动程序已经解决了这个问题