我想在我的docker容器中运行selenium和无头chrome以进行测试。
我试图在我的.js文件中使用以下内容在无头镀铬(我的码头工人容器外)中运行selenium。这很有效:
const client = webdriverio.remote({
desiredCapabilities: {
browserName: 'chrome',
chromeOptions: {
args: ['--headless', '--disable-gpu']
},
binary: '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
},
baseUrl: CONFIG.host,
logLevel: 'verbose',
waitForTimeout: 3000
})
但是我无法在Docker容器中使用它。在我的docker容器中,我使用“FROM selenium / standalone-chrome”。我的dockerfile似乎没有任何问题。当我尝试运行我的硒测试时会出现问题。我将.js文件中的binary_path更改为/ opt / google / chrome / google-chrome。但是测试失败了,甚至无法启动客户端。
所以我尝试运行/ opt / google / chrome / google-chrome以查看Chrome是否有效,但之后我收到此错误:
[0711/005304.226472:ERROR:nacl_helper_linux.cc(311)] NaCl helper
process running without a sandbox!
Most likely you need to configure your SUID sandbox correctly
我对此很新(以及堆栈溢出),所以我可能会遗漏一些基本的东西。
答案 0 :(得分:1)
尝试加入--no-sandbox
chromeOptions: {
args: ['--headless', '--disable-gpu', '--no-sandbox']
},
正如我在docker-selenium
所做的那样答案 1 :(得分:0)
此错误消息...
[1003/144118.702053:ERROR:nacl_helper_linux.cc(310)] NaCl helper process running without a sandbox!
Most likely you need to configure your SUID sandbox correctly
...表示您的系统中没有setuid沙箱,因此该程序无法启动/产生新的浏览上下文即 Chrome浏览器会话。
最简单(不是很干净)的解决方案是,如果您想运行Chrome并且仅使用名称空间沙箱,则可以设置标志:
--disable-setuid-sandbox
此标志将禁用setuid沙箱(仅Linux)。但是,如果在没有名称空间沙箱适当内核支持的主机上执行此操作,Chrome将不会启动。另外,您也可以使用标志:
--no-sandbox
此标志将为通常被沙盒化的所有进程类型禁用沙盒。
示例:
chromeOptions: {
args: ['--disable-setuid-sandbox', '--no-sandbox']
},
您可以在Security Considerations - ChromeDriver - Webdriver for Chrome
中找到详细的讨论
根据Linux SUID Sandbox Development google-chrome中的文档,需要一个SUID
帮助程序二进制文件才能在Linux上打开沙箱。在大多数情况下,您可以使用以下命令为您安装适当的沙箱:
build/update-linux-sandbox.sh
该程序将在/usr/local/sbin
中为您安装正确的沙盒,并告诉您根据需要更新.bashrc
。
但是,举例来说,可能会有一些例外,如果您的setuid
二进制文件已过期,则会收到诸如以下消息:
NaCl helper process running without a sandbox!
Most likely you need to configure your SUID sandbox correctly
或
Running without the SUID sandbox!
在这些情况下,您需要:
chrome_sandbox
而不是ninja -C xxx chrome chrome_sandbox
)时都构建ninja -C xxx chrome
构建后,执行update-linux-sandbox.sh
。
# needed if you build on NFS!
sudo cp out/Debug/chrome_sandbox /usr/local/sbin/chrome-devel-sandbox
sudo chown root:root /usr/local/sbin/chrome-devel-sandbox
sudo chmod 4755 /usr/local/sbin/chrome-devel-sandbox
最后,您必须在~/.bashrc
(或.zshenv
)中加入以下行:
export CHROME_DEVEL_SANDBOX=/usr/local/sbin/chrome-devel-sandbox