Nik*_*wal 9 linux selenium google-chrome selenium-chromedriver selenium-webdriver
我也有一个带有 UI 的 ubuntu 服务器。你可以通过触发 mvn test 命令来执行测试用例。但问题是当我从另一台机器通过终端对机器执行 ssh 时,我收到以下错误 -
unknown error: DevToolsActivePort file doesn't exist
(Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee976b2c3e3b9f335cde7),platform=Linux 4.4.0-121-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.04 seconds
Build info: version: '3.8.1', revision: '6e95a6684b', time: '2017-12-01T18:33:54.468Z'
System info: host: 'ubuntu-test', ip: 'X.X.X.X', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-121-generic', java.version: '1.8.0_171'
Driver info: driver.version: ChromeDriver
Run Code Online (Sandbox Code Playgroud)
但是,如果我通过 remmina 远程控制机器,然后执行该机器终端的相同命令,则相同的命令会成功启动 chrome。
Chrome 在启动期间崩溃的一个常见原因是在 Linux 上以
root
用户 (administrator
)运行 Chrome 。虽然可以通过--no-sandbox
在创建 WebDriver 会话时传递标志来解决此问题,但这种配置不受支持且非常不鼓励。您需要将环境配置为以普通用户身份运行 Chrome。
这个错误信息...
unknown error: DevToolsActivePort file doesn't exist
Run Code Online (Sandbox Code Playgroud)
...暗示ChromeDriver无法启动/生成新的WebBrowser,即Chrome 浏览器会话。
你的代码试验和所有二进制文件的版本信息会给我们一些关于出了什么问题的提示。
但是,根据将 --disable-dev-shm-usage添加到默认启动标志似乎添加参数--disable-dev-shm-usage
将暂时解决问题。
如果您希望启动/跨越新的Chrome 浏览器会话,您可以使用以下Java解决方案:
System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--no-sandbox"); // Bypass OS security model
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");
Run Code Online (Sandbox Code Playgroud)
根据base_switches.cc disable-dev-shm-usage
似乎仅在Linix OS上有效:
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// The /dev/shm partition is too small in certain VM environments, causing
// Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
// work-around this issue (a temporary directory will always be used to create
// anonymous shared memory files).
const char kDisableDevShmUsage[] = "disable-dev-shm-usage";
#endif
Run Code Online (Sandbox Code Playgroud)
在讨论中添加一个选项以使用 /tmp 而不是 /dev/shm David 提到:
我认为这取决于 /dev/shm 和 /tmp 的安装方式。如果它们都安装为 tmpfs,我假设不会有任何区别。如果由于某种原因 /tmp 没有映射为 tmpfs(我认为 systemd 默认映射为 tmpfs),chrome 共享内存管理在创建匿名共享文件时总是将文件映射到内存中,所以即使在这种情况下也不应该差别很大。我想你可以在启用标志的情况下强制进行遥测测试,看看它是如何进行的。
至于为什么不默认使用,这是共享内存团队的推论,我想默认情况下应该使用 /dev/shm 作为共享内存是有道理的。
最终所有这些都应该转向使用 memfd_create,但我认为这不会很快发生,因为它需要显着重构 Chrome 内存管理。
您可以在以下位置找到一些详细的讨论:
这是沙盒故事的链接。
归档时间: |
|
查看次数: |
32279 次 |
最近记录: |