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);
目前,您可以使用此解决方法:
下载Chrome的上一版本。这是 81 版的:https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Win/735601/
通过参数“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
- 享受使用旧版本的 Chrome。
chromeOptions.addArguments("--disable-backgrounding-occluded-windows");
自更新到 Chrome 87 和 chrome 驱动程序 87 后,我 运行 遇到了同样的问题。
在此处找到修复:
https://support.google.com/chrome/thread/83911899?hl=en
最新的 chrome - chrome驱动程序已经解决了这个问题
我刚升级到最新版本 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);
目前,您可以使用此解决方法:
下载Chrome的上一版本。这是 81 版的:https://commondatastorage.googleapis.com/chromium-browser-snapshots/index.html?prefix=Win/735601/
通过参数“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
- 享受使用旧版本的 Chrome。
chromeOptions.addArguments("--disable-backgrounding-occluded-windows");
自更新到 Chrome 87 和 chrome 驱动程序 87 后,我 运行 遇到了同样的问题。
在此处找到修复: https://support.google.com/chrome/thread/83911899?hl=en
最新的 chrome - chrome驱动程序已经解决了这个问题