我正在使用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合作?
答案 0 :(得分:1)
您的代码中存在一些问题
页面只是Capybara.current_session的别名。如果您为其分配,则表示您正在创建一个本地变量,而且它不再是会话
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')