我有一个应用程序可以启用/禁用按钮以响应 UI 中发生的事情。
我可以很容易地使用 capybara 来检测按钮是否存在
should have_button 'save'
但我不知道如何验证保存按钮的状态。那是:
如何编写 Capybara 断言来检查按钮的存在及其启用或禁用状态?
我已经对禁用按钮进行了检查;对于启用,我想我可以验证是否有匹配的按钮并且没有匹配的禁用按钮。但是,至少可以说,这很笨拙。
这似乎是一个基本的 UI 检查,我确信我错过了一些东西,但我似乎无法弄清楚是什么。
根据gregates的回答跟进:
正如我在评论中提到的,Capybara 的行为取决于底层驱动程序。我们正在使用 webkit,它返回“true”/“false”字符串结果。显然,其他驱动程序返回真/假。Capybara 的人们意识到了这个问题(github.com/jnicklas/capybara/issues/705),但他们觉得(可能是正确的)这不是他们真正需要解决的问题。
我最终创建了一个自定义匹配器,而不是让我的测试依赖于我正在使用的驱动程序:
RSpec::Matchers.define :be_enabled do
match do |actual|
driver_result = actual[:disabled]
# nil, false, or "false" will all satisfy this matcher
(driver_result.nil? || driver_result == false || driver_result == "false").should be_true
end
end
RSpec::Matchers.define :be_disabled do
match do |actual|
driver_result = actual[:disabled]
(driver_result == "disabled" || driver_result == true || driver_result == "true").should be_true
end
end
然后你可以输入:
user_license_area.find_button('Save').should be_disabled