Невозможно нажать на флажок. Использование page-object-gem

У меня возникли проблемы с установкой флажка с помощью page-object-gem. HTML-код выглядит следующим образом:

<label class='cc pointer value-apple'>
 <input class='hidden' type='checkbox' value='apple'></input>
 <div style="background-image:url(/images/fruit-apple-3453452346.jpg)"><div>
</label>
<label class='cc pointer value-banana'>
 <input class='hidden' type='checkbox' value='banana'></input>
 <div style="background-image:url(/images/fruit-banana-2359235674.jpg)"><div>
</label>

Используя watir-webdriver, у меня нет проблем с нажатием на метку или div, поскольку флажок скрыт. Те работают нормально. Однако это не работает с использованием page-object-gem. Я пробовал следующее:

label(:select_fruit_apple, :class => /apple/)
on(FruitsPage).select_fruit_apple

div(:select_fruit_apple, :style => /apple/)
on(FruitsPage).select_fruit_apple

Любые предложения о том, как это сделать, очень ценятся.


person Jay Sandals    schedule 18.12.2013    source источник


Ответы (1)


Поскольку Watir-Webdriver требует, чтобы вы щелкнули метку или div, вам придется сделать то же самое с объектом страницы.

Методы доступа label и div не создают методов для щелчка по элементу. Для кода, который вы пробовали, когда вы вызываете select_fruit_apple, он просто возвращает текст метки или элемента div.

Чтобы щелкнуть метку (или div), вам необходимо:

  1. Получите элемент label/div. Это можно сделать, определив метод, использующий NestedElement. или создание средства доступа label/div и использование метода _element.
  2. Вызовите метод click для элемента. Это вызовет метод щелчка Watir-Webdriver.

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

class MyPage
  include PageObject

  def select_fruit_apple()
    label_element(:class => 'value-apple').click  
  end
end

В качестве альтернативы, если вам нужен элемент label/div для нескольких вещей, вы можете создать для них метод доступа:

class MyPage
  include PageObject

  label(:apple, :class => 'value-apple')
  def select_fruit_apple()
    apple_element.click
  end
end

Затем вы можете вызвать этот метод, чтобы установить флажок:

on(FruitsPage).select_fruit_apple    

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

class MyPage
  include PageObject

  def select_fruit(fruit)
    label_element(:class => 'value-' + fruit).click  
  end
end

Тогда вызов метода будет таким:

on(FruitsPage).select_fruit('apple')
person Justin Ko    schedule 18.12.2013
comment
Спасибо, Джастин. Я использовал on(FruitsPage).select_fruit_apple_element.click, и это помогло. - person Jay Sandals; 19.12.2013