水豚 find_field & has_selector 不工作

Capybara find_field & has_selector not working

我正在使用 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 returns 错误:"NoMethodError: undefined method `has_selector?' for {"status"=>"success"}:Hash"

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

我也试过用fill_in设置字段值,也没用。

我怎样才能让它与 Capybara 一起工作?

您的代码中有几个问题

  1. page 只是 Capybara.current_session 的别名。如果你分配给它,你正在创建一个局部变量,它不再是一个会话

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

您的代码应该是

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')