我正在编写一个用Capybara填充文本字段的脚本,但在填写字段之前,我想确保字段为空并且文本未自动填充。基本上,我正在寻找
的反面(Object) fill_in(locator, options = {}) #empty_content_of? delete?
在此处找到:http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Actions。建议?
答案 0 :(得分:11)
在与此斗争之后,我问了一位同事,解决方案是使用以下内容:
fill_in(locator, with: "")
所以,例如:
fill_in "Name", with: ""
这很有道理,对许多人来说可能是直观的,但是我很难过,无法找到答案,所以我想我会发布它以防万一。
答案 1 :(得分:7)
您可以使用本机selenium绑定来清除输入字段而无需填充空字符串
element = find('locator')
element.native.clear
我更喜欢这个选项,而不是fill_in
。
此外,如果您考虑填写,则仅限于通过标签或名称查找您的定位器,因此如果它没有标签或名称,您仍然必须使用find
答案 2 :(得分:3)
仅对我而言,此解决方案有效:
fill_in('Foo', with: 'bar', fill_options: { clear: :backspace })
我在前端有Vue.js。
答案 3 :(得分:2)
对于React,您必须做更多的事情。 fill_in field, with: ''
做native.clear
。这在React中不能很好地发挥作用。 fill_in field, with: 'some text'
并非如此。因为它会在键入文本之前arguments[0].value = ''
。
我遇到了react-datetime
的问题。我已经解决的是:
def fill_in_react_datetime n, options
with = options[:with] == '' ? '' : format_date(options[:with])
fill_in n, with: with, fill_options: {clear: [[:control, 'a'], :delete]}
end
答案 4 :(得分:0)
一种对我有效且始终可靠的解决方案:
field = find('locator')
field.value.length.times { field.send_keys [:backspace]} }
用Capybara模仿用户的行为,这对我来说似乎也是正确的方法。