我正在编写一个脚本,用 Capybara 填写文本字段,但在填写字段之前,我想确保字段为空并且文本不会自动填充。基本上,我正在寻找相反的
(Object) fill_in(locator, options = {}) #empty_content_of? delete?
在这里找到:http ://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Actions 。建议?
我正在编写一个脚本,用 Capybara 填写文本字段,但在填写字段之前,我想确保字段为空并且文本不会自动填充。基本上,我正在寻找相反的
(Object) fill_in(locator, options = {}) #empty_content_of? delete?
在这里找到:http ://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Actions 。建议?
对我来说,只有这个解决方案有效:
fill_in('Foo', with: 'bar', fill_options: { clear: :backspace })
我在前端有 Vue.js。
在为此苦苦挣扎之后,我问了一位同事,解决方案是使用以下方法:
fill_in(locator, with: "")
因此,例如:
fill_in "Name", with: ""
这很有意义,对许多人来说可能很直观,但我很困惑,找不到关于 SO 的答案,所以我想我会发布它以防它对任何人有帮助。
您可以使用本机 selenium 绑定来清除输入字段,而无需填写空字符串
element = find('locator')
element.native.clear
我更喜欢这个选项而不是fill_in
.
另外,如果您考虑一下,填写仅限于通过标签或名称查找定位器,因此如果它没有标签或名称,您仍然必须使用find
对于 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
一个对我有用且一直可靠的解决方案:
field = find('locator')
field.value.length.times { field.send_keys [:backspace] }
在 Capybara 模仿用户行为的术语中,这对我来说似乎也是一种正确的做法。
在接受的答案的基础上,您可以选择通过with: nil
:
例如
fill_in("search-input", with: nil, fill_options: { clear: :backspace })
为了明确起见,我更喜欢nil
空字符串 ( )。""
我明确没有设置值并使用退格键清除。进行可理解的测试。