2016-09-02 87 views
0

我不知道爲什麼我不能輸入字段clear清除輸入字段:未定義的方法`清除'爲#<Watir :: Input:XYZ>(NoMethodError)

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) 
+0

我覺得設置也設置新值之前清除舊值,這樣可以刪除此行'test_input_field.when_present.clear '並嘗試.. –

+1

kk是真的,但對我來說更重要的是爲什麼清除和輸入不能一起工作:) – Becks303

+0

所以這已經由賈斯汀柯回答..需要遵循他的答案.. :) –

回答

1

的沒有爲通用輸入元素定義(和set)方法 - 即Watir::Input。它們僅針對特定輸入類型(文本字段,複選框等)進行定義。

要使代碼正常工作,您需要將input轉換爲更具體的類型,這可能是文本字段。

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

由於@SaurabhGaur提到,set已經通過清除現有的值開始,所以你可以只執行:您可以使用to_subtype方法做到這一點

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 
+0

從來沒有聽說過。 to_subtype,有趣。 是的text_field現在做得很好。 因此.clear似乎不適用於一般輸入。 thx – Becks303

+1

「clear」和「set」的問題在於,它們需要根據輸入類型在功能上做不同的事情。例如,清除複選框需要執行一次單擊操作,清除文本字段意味着選擇文本並點擊刪除按鈕。因此,僅爲特定輸入類型實現方法而非常規輸入纔有意義。 –

+0

好吧,明白了 – Becks303