清除输入字段:对于#<watir :: input:xyz>(NoMethodError),未定义的方法`clear'

时间:2016-09-02 10:29:43

标签: ruby cucumber watir-webdriver

我不确定为什么我不能clear我的输入字段。

PageObject

element(:test_input_field) { |b| b.input(class: "search-field") }

def set_search_value(search_entry)
  test_input_field.when_present.clear
  test_input_field.when_present.set(search_entry)
end

Step_file

page.set_search_value(search_entry)

输出

undefined method `clear' for #'<'Watir::Input:0x00000003980d20'>' (NoMethodError)

1 个答案:

答案 0 :(得分:1)

未为通用输入元素定义clear(和set)方法 - 即Watir::Input。它们仅针对特定输入类型定义 - 文本字段,复选框等。

要使代码有效,您需要将input转换为更具体的类型,这可能是文本字段。您可以使用to_subtype方法执行此操作:

test_input_field.when_present.to_subtype.clear
test_input_field.when_present.to_subtype.set(search_entry)

正如@SaurabhGaur所提到的那样,set已经从清除现有值开始,所以你可以这样做:

test_input_field.when_present.to_subtype.set(search_entry)

除非input类型发生更改,否则将元素定义为text_field会更有意义,因此您无需转换它。它可能取决于您使用的页面对象库,但我希望您可以这样做:

element(:test_input_field) { |b| b.text_field(class: "search-field") }

def set_search_value(search_entry)
  test_input_field.when_present.clear
  test_input_field.when_present.set(search_entry)
end