使用Capybara从文本字段中删除内容

时间:2013-06-15 03:16:36

标签: automation capybara

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

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

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

5 个答案:

答案 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模仿用户的行为,这对我来说似乎也是正确的方法。