Capybara find_field& has_selector不工作

时间:2016-09-07 15:39:14

标签: ruby capybara

我正在使用Capybara并从发现者那里得到错误' find_field' &安培; ' has_selector'

我尝试过像这样使用它们:

page = visit "http://www.my-url-here.com"   
next if page.has_selector?('#divOutStock')
page.find_field('#txtQty').set('9999')

has_selector返回错误:" NoMethodError:未定义的方法`has_selector?' for {" status" =>" success"}:Hash"

find_field无法找到该字段。 (它出现在页面上,不是隐藏字段。)

我也尝试使用fill_in来设置字段值,但也不起作用。

我怎样才能与Capybara合作?

1 个答案:

答案 0 :(得分:1)

您的代码中存在一些问题

  1. 页面只是Capybara.current_session的别名。如果您为其分配,则表示您正在创建一个本地变量,而且它不再是会话

  2. find_field采用定位符 - http://www.rubydoc.info/gems/capybara/Capybara/Node/Finders#find_field-instance_method - 将与ID,名称或标签文本进行匹配。它不需要CSS选择器

  3. 您的代码应为

    page.visit "http://www.my-url-here.com"   
    next if page.has_selector?('#divOutStock')
    page.find_field('txtQty').set('9999')
    

    你可以将最后一行重写为

    page.fill_in('txtQty', with: '9999')
    

    另外你应该注意(如果使用支持JS的驱动程序)has_selector?将等待Capybara.default_max_wait_time以显示#divOutStock。如果它通常不会在那里,你想加快一点,你可以做一些像

    page.visit "http://www.my-url-here.com"   
    page.assert_text('Something always on page once loaded') #ensure/wait until page is loaded
    next if page.has_selector?('#divOutStock', wait: 0) # check for existence and don't retry
    page.fill_in('txtQty', with: '9999')