2

我无法使用 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

非常感谢任何有关如何执行此操作的建议。

4

1 回答 1

0

由于 Watir-Webdriver 要求您单击标签或 div,因此您必须对页面对象执行相同操作。

label 和 div 访问器方法不会创建单击元素的方法。对于您尝试的代码,当您调用时select_fruit_apple,它只是返回标签或 div 元素的文本。

要单击标签(或 div),您需要:

  1. 获取标签/div 元素。这可以通过定义使用NestedElement的方法或创建标签/div 访问器并使用该_element方法来完成。
  2. 调用click元素的方法。这将调用 Watir-Webdriver 的 click 方法。

如果您直接使用 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')
于 2013-12-18T22:21:45.230 回答