Rspec 如何使用水豚来测试野外能见度?

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

注意:这个问题是关于使用Capybara 1.1.2,而不是当前版本

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

隐藏文本字段:

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

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

注:此答案适用于当前(目前为2.14.3)版本的水豚。经过讨论后才得出结论,OP使用的是行为明显不同的水豚1.1.2

有几件事

  • 如果您正在测试应用程序,请不要更改Capybara。忽略隐藏元素(只需将其保留为默认值true),在您希望Capybara“查看”不可见元素的查询中使用
    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-设置在此处-