如何解决Minitest & Webdrivers:无法连接到 chromedriver
背景:
MacOSX 上的 Rails 5.x / Ruby 2.6.3 应用
我是系统集成测试的新手,直到刚刚完成基本的控制器测试。
我在做什么
我的 gemfile 是这样的:
group :development do
gem 'capybara'
gem 'selenium-webdriver'
gem 'webdrivers'
end
我从 Brew 安装了 chromedriver 并像这样运行:
/usr/local/bin/chromedriver --verbose --port=9516
我已经注释掉了所有自动生成的测试,并留下了一个只访问索引页面等的基本测试。
问题
我的测试失败:
Minitest::UnexpectedError: Selenium::WebDriver::Error::WebDriverError: unable to connect to chromedriver 127.0.0.1:9515
如果我切换 chromedriver
端口,另一个端口 (9516/9516) 的测试将失败。
问题
这里有什么明显的问题,还是我这样做完全错误?
更新
根据下面的答案,我做了以下事情:
-
放弃了 brew 安装
-
按照手册和下面的答案添加到我的
test_helper.rb
中:模块 ActionDispatch 类集成测试 包括水豚::DSL # 使
assert_*
方法表现得像 Minitest 断言 包括 Capybara::Minitest::Assertions# Reset sessions and driver between tests teardown do Capybara.reset_sessions! Capybara.use_default_driver end include Devise::Test::IntegrationHelpers setup do Capybara.server = :thin Capybara.current_driver = :selenium_chrome end end
结束
测试仍然失败:
#<Thread:0x00007ff6f88922f8@/Users/aximus/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/capybara-3.35.1/lib/capybara/server.rb:76 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
/Users/aximus/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/capybara-3.35.1/lib/capybara/server.rb:77:in `block in boot': undefined method `call' for nil:NilClass (NoMethodError)
#<Thread:0x00007ff6f8068528@/Users/aximus/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/capybara-3.35.1/lib/capybara/server.rb:76 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
/Users/aximus/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/capybara-3.35.1/lib/capybara/server.rb:77:in `block in boot': undefined method `call' for nil:NilClass (NoMethodError)
ERROR["test_visiting_the_index",#<Minitest::Reporters::Suite:0x00007ff6f7a48d50 @name="WellsTest">,10.740007999993395]
test_visiting_the_index#WellsTest (10.74s)
Minitest::UnexpectedError: NoMethodError: undefined method `call' for nil:NilClass
/Users/aximus/.rbenv/versions/2.5.5/lib/ruby/gems/2.5.0/gems/capybara-3.35.1/lib/capybara/server.rb:77:in `block in boot'
更新 2
thin 不受支持 - 切换到 puma:https://github.com/teamcapybara/capybara/issues/2448
12:31:39 - 信息 - 运行:test/system/work_breakdown_structures_test.rb 从运行选项开始 --seed 43168
Capybara starting Puma...--=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=---=] 0% Time: 00:00:00,ETA: ??:??:??
* Version 5.2.0,codename: Fettisdagsbulle
* Min threads: 0,max threads: 4
* Listening on http://127.0.0.1:60707
ERROR["test_visiting_the_index",#<Minitest::Reporters::Suite:0x00007fcafb268068 @name="WorkBreakdownStructuresTest">,73.58754300000146]
test_visiting_the_index#WorkBreakdownStructuresTest (73.59s)
Minitest::UnexpectedError: Selenium::WebDriver::Error::WebDriverError: unable to connect to chromedriver 127.0.0.1:9515
test/system/work_breakdown_structures_test.rb:9:in `block in <class:WorkBreakdownStructuresTest>'
1/1: [==============================================================================================================] 100% Time: 00:01:13,Time: 00:01:13
Finished in 73.58843s
1 tests,0 assertions,0 failures,1 errors,0 skips
试过这个Capybara.server_port = 60707
,但没有用。
解决方法
我发现少了几个步骤。
-
您不应该从 brew 安装 chromedriver,您可以使用“webdrivers” gem 来处理。默认情况下,gem 将在
~/.webdrivers
目录中安装驱动程序。 -
运行集成测试时,您需要为 Capybara 设置正确的驱动程序。 https://github.com/teamcapybara/capybara#selenium
Capybara.current_driver = :selenium_chrome
非常愚蠢且不明显的问题 - 宝石需要在 participants = []
strainer = SoupStrainer("a")
soup = BeatifulSoup(html.text "html.parser",parse_only=strainer)
for elem in soup.find_all("a"):
try:
class_ = elem["class"]
except:
continue
if "participantName" in class_:
participants.append(elem["href"])
组中?♂️:
test
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。