我在网站上运行了大量测试。 当我在 Windows 上本地运行测试时,它们都 100% 通过。该测试是在 Google Chrome 上设计和运行的。
现在,我们已经开始通过 Jenkins 作业在无头模式下在 Linux 上运行测试。现在有些测试在 0% 的情况下失败,或者仅在 20% 甚至 10% 的情况下通过。在我的代码中,我通过 ID、xpath 或 css 查找元素,然后简单地单击它们。我使用 WebDriverWait 对象进行等待 - 既等待元素出现又可单击。
我的代码示例:
WebDriverWait wait = new WebDriverWait(browser, secondsToWait);
wait.until(ExpectedConditions.presenceOfElementLocated(By.id(elementID)));
lastFoundElement = wait.until(ExpectedConditions.elementToBeClickable(By.id(elementID)));
clickLastFoundElement();
在我的报告中,我主要看到未找到元素,并且我通过了等待对象中设置的超时。
如何让无头测试更加稳定?
为什么无头状态会带来这么多问题?
Selenium 社区实际上知道 Headless 并不稳定,请阅读此处 了解更多信息
激活无头模式后,Chrome 运行非常不稳定。 存在多种不同的问题和错误,具体取决于:Chrome 版本、
ChromeDriver
版本和 executed tests.
问题和修复(迄今为止发生的):
Exception:
No informative Error message. Only a timeout exception when navigate() is called on the driver:
org.openqa.selenium.TimeoutException: timeout
Fix:
options.addArguments("--proxy-server='direct://'");
options.addArguments("--proxy-bypass-list=*");
Fix:
options.addArguments("--proxy-server='direct://'");
options.addArguments("--proxy-bypass-list=*");
当测试运行很长时间时,Chrome 在一定时间后无法正常运行。在一个测试会话中执行许多操作
Exception:
... Timed out receiving message from renderer: ...
Fix (not tested yet!):
options.addArguments("--disable-browser-side-navigation");
您可能缺少设置无头窗口大小。
试试这个设置:
Map<String,String> prefs = new HashMap<>();
prefs.put("download.default_directory", downloadsPath); // Bypass default download directory in Chrome
prefs.put("safebrowsing.enabled", "false"); // Bypass warning message, keep file anyway (for .exe, .jar, etc.)
ChromeOptions opts = new ChromeOptions();
opts.setExperimentalOption("prefs", prefs);
opts.addArguments("--headless", "--disable-gpu", "--window-size=1920,1080","--ignore-certificate-errors","--no-sandbox", "--disable-dev-shm-usage");
driver = new ChromeDriver(opts);
在这里,我放置了更多我用于无头镀铬的设置。
我希望这对你有用。
请在 chrome 选项中包含屏幕尺寸。
ChromeOptions options = new ChromeOptions();
options.addArguments(Arrays.asList("--window-position=0,0"));
options.addArguments(Arrays.asList("--window-size=1840,1080"));
请分享最终对OP有效的解决方案。