2016-09-02 1 views
0

Я не уверен, почему я не могу clear мое поле ввода.Очистить поле ввода: неопределенный метод `clear 'для # <Watir :: Вход: 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 yea true, но для меня было более важно, почему ясность и ввод не работают вместе :) – Becks303

+0

Так вот, это уже ответил Джастин Ко..последовательно, чтобы следовать его ответу .. :) –

ответ

1

clearset) не определены для общих входных элементов - то есть 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 
+0

Никогда не слышал о. to_subtype, интересно. Да, теперь текстовое поле все в порядке. Так что .clear, похоже, не работает на общем вводе. thx – Becks303

+1

Проблема с 'clear' и' set' заключается в том, что им необходимо функционально выполнять разные вещи на основе типа ввода. Например, при очистке флажка нужно сделать клик, где при очистке текстового поля нужно выбрать текст и нажать кнопку удаления. В результате имеет смысл только реализовать методы для конкретных типов входных данных, а не для общего ввода. –

+0

Хорошо, понял – Becks303

Смежные вопросы