使用Capybara时我有这段代码:
a = page.find(".show-link")
a.click
expect(page).not_to have_css(".someClass.hidden")
我有链接
<a class="show-link" href="">Show me!</a>
我还有js函数绑定到click事件,它从元素中删除了隐藏的类:
$("body").on("click", ".show-link",function(){$('.someClass').removeClass('hidden');return false;});
但不是在点击时执行我的js功能,而是重定向到另一个页面。
我尝试设置href = "#"
,我尝试将<a>
更改为<span>
但不起作用
脚本未执行。
答案 0 :(得分:0)
在测试定义中,添加title
value2
,以便:
:js => true
Capybara将使用describe 'some stuff which requires js', :js => true do
it 'will test this or that' do
...
end
end
(默认驱动程序)来测试您的JavaScript功能。它非常酷,因为它使用实际的浏览器窗口。
答案 1 :(得分:0)
test "this is my test" do
Capybara.current_driver = Capybara.javascript_driver
#test logic goes here
Capybara.use_default_driver
end
理想情况下,你不会像这样更改内联驱动程序,但是将它们放入你的设置和拆卸测试中。像这样:
setup do
Capybara.current_driver = Capybara.javascript_driver
end
teardown do
Capybara.use_default_driver
end
Capybara documentation中也列出了这一点。
答案 2 :(得分:0)
正如已经提到的,你需要使用一些支持js
执行的驱动程序(webkit,poltergeist,selenium)。
此外,应该只有一个匹配元素,即如果有一个元素".someClass.hidden"
而另一个".someClass.shown"
测试将无法通过
另一个选择是你错误地使用了Capybara匹配器:
expect(page).not_to have_css(".someClass.hidden")
应该
expect(page).to have_no_css(".someClass.hidden")
的为什么吗
Capybara有等待某事发生的逻辑,所以在这种情况下它会检查该页面是否有.someClass.hidden
并立即找到这样的元素。如果它是have_no_css
它将找到元素,但然后重试几次等待它消失