Rspec 如何使用水豚来测试野外能见度?
注意:这个问题是关于使用Capybara 1.1.2,而不是当前版本 我有一个隐藏的文本字段,和一个使其可见的按钮 隐藏文本字段:Rspec 如何使用水豚来测试野外能见度?,rspec,capybara,Rspec,Capybara,注意:这个问题是关于使用Capybara 1.1.2,而不是当前版本 我有一个隐藏的文本字段,和一个使其可见的按钮 隐藏文本字段: <input type="text" name="Franchise Name" id="new_franchise_name" placeholder="Franchise Name" style="display:none;" /> 我已经探索了一些其他的方法,但这似乎是最直接的。。。除了它不起作用。有什么建议吗?注:此答案适用于当前(目前为2.1
<input type="text" name="Franchise Name" id="new_franchise_name" placeholder="Franchise Name" style="display:none;" />
我已经探索了一些其他的方法,但这似乎是最直接的。。。除了它不起作用。有什么建议吗?注:此答案适用于当前(目前为2.14.3)版本的水豚。经过讨论后才得出结论,OP使用的是行为明显不同的水豚1.1.2 有几件事
visible
选项<代码>页面。查找(“#新特许经营权名称”,可见::全部)all
,而支持find
(任何具有id的元素都应该是这样)all
有许多缺点,其中最重要的一点是它不会等待元素出现,除非您传递一个计数选项。(first
也有同样的缺点)find
expect(page).not_to have_css('#new_franchise_name') # or .to have_no_css(...)
page.click_button('Create New Franchise')
expect(page).to have_css('#new_franchise_name')
expect(page).not_to have_css('#new_franchise_name', visible: true) # or .to have_no_css(...)
page.click_button('Create New Franchise')
expect(page).to have_css('#new_franchise_name', visible: true)
如果出于某种原因,您已将Capybara.ignore\u hidden\u elements
的默认设置更改为false,则测试可以编写为
expect(page).not_to have_css('#new_franchise_name') # or .to have_no_css(...)
page.click_button('Create New Franchise')
expect(page).to have_css('#new_franchise_name')
expect(page).not_to have_css('#new_franchise_name', visible: true) # or .to have_no_css(...)
page.click_button('Create New Franchise')
expect(page).to have_css('#new_franchise_name', visible: true)
谢谢你的提示!确实是非常有用的建议。问题是,这并不能解决我遇到的问题,因为这些预期不会测试元素的可见性。无论是否单击按钮,
输入#新建_特许经营_名称
都存在。我还得到了以下错误:RSpec::Expectations::ExpectationNotMetError:expected css“#new_特许经营权_name”不返回任何内容
,而这些expected方法应该返回布尔值。任何suggestions@JesseNovotny期望值不会返回布尔值——它们要么成功,要么出错,这通常是测试中需要的。听起来你已经在某个地方设置了Capybara.ignore\u hidden\u elements=false
,这在编写测试时是一个很糟糕的主意(尽管对于自动化来说是可以的),因为这意味着你不再测试用户能够看到/做的事情。我将更新答案以指定所需的可见性,但更好的解决方案是停止更改默认值ignore\u hidden\u elementsThanks!那太棒了。我的理解是,Capybara.ignore\u hidden\u elements
默认为false。它当前返回false,我只在pry中将其设置为“尝试”。@JesseNovotny如果您确实需要布尔响应,那么您将使用页面。has_css?(…)
,但是,如果编写测试,很少有时候您希望得到布尔响应而不是测试失败。@JesseNovotny您使用的是哪一版本的Capybara?自v2.1(4年前)以来,它默认为true-设置在此处-