2017-06-23 99 views
0

注:这个问题是关于使用水豚1.1.2,而不是最新版本。如何用水豚测试野外可见度?

我有一个隐藏的文本字段和一个使其可见的按钮。

隐藏的文本字段:

<input type="text" name="Franchise Name" id="new_franchise_name" placeholder="Franchise Name" style="display:none;" /> 

按钮和js事件处理这使得上述领域可见:

<button class="btn btn-medium" id="create_franchise" data-remote="true" >Create New Franchise</button> 

$('#create_franchise').click(function(){ 
    $('#new_franchise_name').css('display', 'inline-block'); 
} 

在我的测试中,我有以下几点:

page.all('#new_franchise_name') #=> returns array with text input 
Capybara.ignore_hidden_elements = true 
page.all('#new_franchise_name') #=> returns empty array as expected 
page.find_button('Create New Franchise').click #=> sets the input css "display:inline-block" 
page.all('#new_franchise_name') #=> still returns empty array. Should include the text field 

我已经探索了其他一些方法,但这似乎是最直接的...除了它不起作用。有什么建议么?

回答

1

注意:这个答案适用于目前(2.14.3当前版本)水豚的版本。它才出来讨论后,该OP使用水豚1.1.2当行为是显著不同

几件事情

  1. 如果您正在测试的应用程序,永远不会改变Capybara.ignore_hidden_​​elements(只需将其保留为默认值true),在想要Capybara“查看”不可见元素的查询上使用visible选项。 page.find('#new_franchise_name', visible: :all)

  2. 远离all支持find当你想要一个单一的元素(任何具有ID的应该是)。 all有一些缺点,其中最重要的是它不会等待元素出现,除非您通过一个计数选项。 (first具有相同的缺点)

  3. 当测试使用的断言/预期而不是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') 

如果由于某种原因,你已经改变了默认设置的Capybara.ignore_hidden_elements为假,则测试可以写成

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) 
+0

感谢您的提示!确实非常有用的建议。问题是这不会解决我遇到的问题,因为这些预期不会测试元素的可见性。 'input#new_franchise_name'存在与否点击按钮。我也遇到以下错误:'RSpec :: Expectations :: ExpectationNotMetError:expected css“#new_franchise_name”当这些方法应该返回一个布尔值时不返回任何东西'。任何建议 –

+0

@JesseNovotny期望不返回布尔值 - 它们要么成功要么提出错误,这通常是测试中需要的。听起来你已经在某处写了'Capybara.ignore_hidden_​​elements = false',这在编写测试时是一个很糟糕的想法(虽然自动化是可以的),因为这意味着你不再测试用户能够看到/做什么。我将更新答案以指定所需的可见性,但更好的解决方案是停止更改ignore_hidden_​​elements的默认值 –

+0

谢谢!那个石头。我的理解是'Capybara.ignore_hidden_​​elements'默认为false。它目前正在返回false,并且我只设置它在pry中尝试。 –