2016-09-07 81 views
0

我正在使用水豚,并从发现者的find_field'&'has_selector'得到错误。水豚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”为{“状态”=>“成功”}:哈希“

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

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

我怎样才能得到这个与水豚一起工作?

+0

不要将'visit'的结果分配给'page'。只需要调用'visit'...'''而不用'page ='。 – Stefan

+0

我仍然得到错误'水豚:: ElementNotFound:无法找到字段“#txtQty”' – NeyLive

回答

1

你有一对夫妇的问题,在你的代码

  1. 页仅仅是Capybara.current_session的别名。如果你分配给它,你创建一个本地变量,它不再是一个会话

  2. find_field需要一个定位器 - http://www.rubydoc.info/gems/capybara/Capybara/Node/Finders#find_field-instance_method - 将与id,名称或标签文本匹配。如果使用的是JS它并不需要一个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') 

另外,应注意的是( 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') 
+0

感谢您的回答,它比水豚文档更清晰。我已经实现了你的建议,但是我得到'NoMethodError:未定义的方法'expect''不期望RSpec方法吗? – NeyLive

+0

@NeyLive哎呀 - 是的 - 我已经更新了不使用RSpec的答案 –

+0

谢谢!这整理它! – NeyLive