Как избежать устаревшего объекта страницы для флажка

Я использую огурец с одного года, и я добавляю в него page-object-gem несколько недель. Когда я выполняю тест, я получаю сообщение:

ПРЕДУПРЕЖДЕНИЕ ОБ УСТАРЕНИИ
Вы вызываете метод с именем checkbox в commentPage.rb:23:in `block in delete_comment'.
Этот метод не существует в объекте страницы, поэтому он передается драйверу.< br/> Эта функция будет удалена в ближайшем будущем.
Измените свой код, чтобы он вызывал правильный метод объекта страницы.

(У меня то же самое для других случаев, но этот "тривиальный" пример должно быть легче объяснить)

Я ищу способ избежать этого, но это кажется сложным.

Для теста проверяю страницу, на которой есть таблица. Каждая строка показывает строку, и мне нужно установить флажок определенной строки.

Мой код в pageObject:

table(:comment_list, :class => 'comments')
button(:delete, :text => "Delete")

def delete_comment (text)
  self.comment_list_element.each do |row|
    if row.text.include? "#{text}"
      row.checkbox.set
      self.delete
      return true
    end
  end
  false
end

Нужна ли мне предварительная обработка моего стола, чтобы использовать его во время теста?


person Fabrice31    schedule 18.09.2012    source источник
comment
row.checkbox.set (единственная строка с флажком внутри;)   -  person Fabrice31    schedule 18.09.2012


Ответы (2)


Вы получаете предупреждение, потому что вызываете метод, который находится в Watir, а не в объекте страницы (метод checkbox в строке таблицы). Если вы хотите получить доступ к флажку, вы можете просто вызвать метод, который вернет вложенный элемент. Это изменит эту часть вызова на row.checkbox_element. Но при следующем звонке вы получите ту же проблему. Прежде всего, метод set не существует в CheckBox. В объекте страницы методы check и uncheck. Полный вызов должен быть:

row.checkbox_element.check

Причина, по которой вы получаете ошибку устаревания, заключается в том, что я планирую удалить переадресацию вызовов базовому драйверу в будущем. Эта способность действительно вызывает массу проблем в сложных ситуациях.

person Cheezy    schedule 19.09.2012
comment
Ах. Я попробовал checkbox_element, но забыл, что это check вместо set. Я думаю, что это должен быть принятый ответ. - person Justin Ko; 19.09.2012
comment
как снять флажок, не используя устаревший метод? - person David West; 29.04.2014
comment
Это немного устарело, но, как говорит Чизи в своем посте, вы можете просто использовать метод снятия отметки. row.checkbox_element.uncheck - person Tyler MacMillan; 17.02.2015

В вашем коде row — это PageObject::Elements::TableRow, для которого не определен метод checkbox. Я не встречал примеров, когда элементы страницы-объекта были соединены в цепочку.

В качестве обходного пути вы можете преобразовать PageObject::Elements::TableRow в обычный Watir::TableRow, выполнив следующие действия:

row.element

Итак, ваш код будет работать, если вы сделаете:

row.element.checkbox.set
person Justin Ko    schedule 18.09.2012