无法单击复选框。使用page-object-gem

时间:2013-12-18 20:58:53

标签: ruby watir-webdriver 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

非常感谢有关如何做到这一点的任何建议。

1 个答案:

答案 0 :(得分:0)

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

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

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

  1. 获取label / div元素。这可以通过定义使用NestedElement的方法或创建label / div访问器并使用_element方法来完成。
  2. 调用元素的click方法。这将调用Watir-Webdriver的点击方法。
  3. 如果你直接使用NestedElement,那么这个类会是什么样子:

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

    或者,如果您需要标签/ 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')