Включен? метод доступен на Watir и/или Page-Objects для ссылки?

Вчера я работал над определением, была ли эта ссылка включена или нет, ожидая, пока она будет включена, чтобы щелкнуть по ней. Я использую гем Cucumber + Ruby + Watir + Page-Object. Ссылка очень похожа на:

<a id="the_link"  href="#" disabled="disabled">Proceed with your order</a>

Как только вы заполните некоторые поля, ссылка активируется, а источник изменится на:

<a id="the_link"  href="#">Proceed with your order</a>

Идея состоит в том, чтобы дождаться, пока ссылка активируется таким образом, который работает с кнопками:

def click_on_link
  Watir::Wait.until { self.the_link_element.element.enabled? }
  self.the_link
end

... но не работает со ссылкой. Я заставил его работать, определяя, существует ли атрибут, следующим образом:

def click_on_proceed_form
  Watir::Wait.until { !self.the_link_element.element.attribute_value('disabled') }
  self.proceed_form_submit
end

Ищете "включено?" в документации Watir здесь или в гем Page-Object здесь, похоже, он доступен для всех элементов. Но поиск того же метода в документации Watir здесь кажется, что это всего лишь доступно для кнопок, выбора и ввода.

Итак, интересно, есть ли «включено»? метод для ссылок (анкоров) и, если он существует, как его использовать. Не могли бы вы помочь прояснить этот вопрос, пожалуйста? Большое тебе спасибо!


person Pablo Gómez    schedule 02.01.2014    source источник


Ответы (1)


Watir-webdriver не поддерживает метод enabled? для ссылок. Я полагаю, это потому, что атрибут disabled не является стандартным атрибутом для ссылок.

С другой стороны, Watir-classic поддерживает метод enabled? для ссылок. Однако он всегда будет возвращать false (опять же, потому что ссылки нельзя отключить).

Поэтому я думаю, что ваш подход правильный (если вы не хотите, чтобы обезьяна исправляла элементы ссылки для поддержки enabled?).

Тем не менее, вы должны стараться избегать прямого использования Watir-webdriver, где это возможно. У гем-объекта страницы есть собственные методы ожидания и получения значений атрибутов:

def click_on_proceed_form
  wait_until{ !the_link_element.attribute('disabled') }
  proceed_form_submit
end
person Justin Ko    schedule 02.01.2014
comment
Он отлично работает с wait_until, спасибо! Я обновлю другие страницы. Но мне нужно вызвать элемент с помощью _element.element, чтобы избежать предупреждения об устаревшем использовании. И здесь, вы правы, себя. не требуются. Но я должен использовать их, например, для заполнения текстовых полей, например: self.first_name = 'John Doh' ... и я не уверен, почему. Я попытаюсь найти причину в сети, и если ничего не найду, я отправлю еще один вопрос. Еще раз спасибо! - person Pablo Gómez; 03.01.2014
comment
Я. здесь не требуется, потому что нет равного метода, для которого требуется получатель, чтобы они не были ошибочно приняты за назначение локальной переменной. - person Pablo Gómez; 03.01.2014
comment
Вы не должны получать устаревшее предупреждение без .element. Убедитесь, что вы используете метод attribute, а не attribute_value. - person Justin Ko; 03.01.2014
comment
Точно, я использовал attribute_value, и поэтому я получаю устаревшее предупреждение. С attribute предупреждений нет. - person Pablo Gómez; 03.01.2014