我正在使用 Capybara Selenium 运行 headless Chrome,效果很好,但我不知道如何使用远程调试。当我添加 --remote-debugging-port=4444
或 --remote-debugging-port=9222
或 --remote-debugging-port=9521
,Selenium 不再连接浏览器运行测试。
如何进行远程调试?这是我的代码供引用:
Capybara.register_driver :selenium do |app|
# from https://github.com/SeleniumHQ/selenium/issues/3738
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(loggingPrefs: {browser: 'ALL'})
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument '--disable-infobars' # hide info bar about chrome automating test
# if we don't use this flag, every selenium test will die with the error:
# "unknown error: Chrome failed to start: exited abnormally"
options.add_argument '--no-sandbox'
# BREAKS THINGS if uncommented
# options.add_argument '--remote-debugging-port=4444'
options.add_argument '--headless'
options.add_argument '--window-size=1600,2400'
options.add_preference('profile.default_content_settings.popups', 0)
options.add_preference('download.default_directory', DownloadHelpers::PATH.to_s)
Capybara::Selenium::Driver.new(
app,
clear_local_storage: true,
clear_session_storage: true,
browser: :chrome,
options: options,
desired_capabilities: capabilities,
)
end
最佳答案
自 chrome 67 and chromedriver 2.39 ,chromedriver 现在可以正确使用您通过 --remote-debugging-port
指定的端口。这消除了相当多的复杂性 from my answer above .我现在采取的步骤适用于我需要使用 chrome_remote 配置下载设置的用例, 如下:
它使用了一个 nodejs 库,crmux - 允许多个客户端同时连接到 chrome 的远程调试端口。
- 首先安装 nodejs:Nodejs v9.7.0工作正常
- 通过运行
npm install crmux -g
安装 crmux
在启动 chromedriver (
Capybara::Selenium::Driver.new
) 之前,您需要生成
一个单独的线程这将启动crmux
,这将让您和 chromedriver 通过 Capybara (4444) 中指定的端口you 与 chrome 本身进行通信:crmux --port=4444 --listen=4444
您可能希望在主脚本/线程中的
spawn
命令之后添加一个sleep 3
,以便在继续您的操作之前为 crmux 的启动留出时间测试启动。
然后您可以使用 chrome_remote (例如)使用端口 4444 访问 chrome,而 capybara 正在做它的事情。
关于ruby - 带有 Selenium 的 Chromedriver 远程调试端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49015203/