21

我正在编写一个脚本,用 Capybara 填写文本字段,但在填写字段之前,我想确保字段为空并且文本不会自动填充。基本上,我正在寻找相反的

(Object) fill_in(locator, options = {})    #empty_content_of? delete?

在这里找到:http ://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Actions 。建议?

4

6 回答 6

19

对我来说,只有这个解决方案有效:

fill_in('Foo', with: 'bar', fill_options: { clear: :backspace })

我在前端有 Vue.js。

于 2019-02-05T14:58:23.793 回答
17

在为此苦苦挣扎之后,我问了一位同事,解决方案是使用以下方法:

fill_in(locator, with: "")

因此,例如:

fill_in "Name", with: ""

这很有意义,对许多人来说可能很直观,但我很困惑,找不到关于 SO 的答案,所以我想我会发布它以防它对任何人有帮助。

于 2013-06-15T03:16:36.333 回答
14

您可以使用本机 selenium 绑定来清除输入字段,而无需填写空字符串

element = find('locator')
element.native.clear

我更喜欢这个选项而不是fill_in.

另外,如果您考虑一下,填写仅限于通过标签或名称查找定位器,因此如果它没有标签或名称,您仍然必须使用find

于 2017-07-26T09:56:14.660 回答
5

对于 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
于 2018-08-11T09:21:00.333 回答
5

一个对我有用且一直可靠的解决方案:

field = find('locator')
field.value.length.times { field.send_keys [:backspace] }

在 Capybara 模仿用户行为的术语中,这对我来说似乎也是一种正确的做法。

于 2019-09-18T07:44:17.103 回答
0

在接受的答案的基础上,您可以选择通过with: nil

例如

fill_in("search-input", with: nil, fill_options: { clear: :backspace })

为了明确起见,我更喜欢nil空字符串 ( )。""我明确没有设置值并使用退格键清除。进行可理解的测试。

于 2022-01-07T01:27:59.773 回答