在许多情况下,您想使用Selenium进行浏览器测试,例如,作为网站爬网或正在开发的Web应用程序的UAT。那么,如何在Heroku上执行这些操作呢?
Heroku CI提供称为Heroku CI的
如何在Heroku上使用Headless Chrome
没有
您可以从Heroku仪表板或Heroku CLI轻松安装buildpack。
从Heroku仪表板
在要使用的Heroku应用程序的仪表板上,转到
对于Heroku CLI
使用
1 | heroku buildpacks:add https://github.com/heroku/heroku-buildpack-google-chrome -a <APP_NAME> |
为
指定目标Heroku应用名称
我也想用硒!
如果使用Selenium,则将需要一个额外的heroku-buildpack-chromedriver buildpack。添加方法与Chrome驱动程序相同,并且添加了buildpack。
要添加的Chrome驱动程序的URL为
如何在Heroku上使用Selenium
现在,如果我设置了buildpack并实际使用它们,该怎么办?注意以下两点是没有问题的。
配置样本
例如,对于
1 2 3 4 5 | options = Selenium::WebDriver::Chrome::Options.new options.binary = ENV.fetch("GOOGLE_CHROME_SHIM") options.add_argument('headless') options.add_argument('disable-gpu') driver = Selenium::WebDriver.for :chrome, options: options |
之后,照常挤压硒就没有问题。
在Heroku CI上使用时为
要将其用作
Heroku CI上的UAT,需要定义它以在
例如,要在
1 2 3 4 5 6 7 8 9 10 11 | { "environments": { "test": { "buildpacks": [ { "url": "heroku/ruby" }, { "url": "https://github.com/heroku/heroku-buildpack-google-chrome" }, { "url": "https://github.com/heroku/heroku-buildpack-chromedriver" } ] } } } |
预防措施
- 尚未正式提供这两个buildpack,目前不支持。
奖金-在Heroku上使用Selenium下载时
当您说要下载
文件时,请记住以下几点:
将
在Ruby中设置
要制作
将来,由于Google Chrome内部结构的变化,预计这种书写方式将会改变或变得不必要。
1 2 3 4 5 6 7 8 9 10 11 12 | def enable_chrome_headless_downloads(driver, directory) bridge = driver.send(:bridge) path = '/session/:session_id/chromium/send_command' path[':session_id'] = bridge.session_id bridge.http.call(:post, path, { "cmd" => "Page.setDownloadBehavior", "params" => { "behavior" => "allow", "downloadPath" => directory, } }) end |
例如,在名为
1 2 3 4 5 6 | prefs = { prompt_for_download: false, directory_upgrade: true, default_directory: download_directory } options.add_preference(:download, prefs) |
用作Worker Dyno时的注意事项(于2019年5月31日添加)
我收到了开发人员的说明,该说明实际上是在以Worker Dyno身份启动的情况下运行的,因此我将其添加。如果您知道如何处理,我将再次添加。