清除输入字段:#<Watir::Input:XYZ> 的未定义方法“clear”(NoMethodError)

Clear input field: undefined method `clear' for #<Watir::Input:XYZ> (NoMethodError)

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

页面对象:

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)

未为通用输入元素定义 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