如何在ruby / watir中获取元素的类?

时间:2013-04-16 17:53:54

标签: ruby watir-webdriver

我有表头的代码:

<thead>
<tr class="ui-jqgrid-labels ui-sortable" role="rowheader" style="">
    <th id="categories_formName" role="columnheader" class="ui-state-default ui-th-column ui-th-ltr" style="width: 250px;">
        <div id="jqgh_categories_formName" class="ui-jqgrid-sortable">Category Name</div>
    </th>
    <th id="categories_totalClicks" role="columnheader" class="ui-state-default ui-th-column ui-th-ltr" style="width: 99px;">
        <div id="jqgh_categories_totalClicks" class="ui-jqgrid-sortable">Clicks</div>
    </th>
    <th id="categories_avgCpc" role="columnheader" class="ui-state-default ui-th-column ui-th-ltr" style="width: 99px;">
        <div id="jqgh_categories_avgCpc" class="ui-jqgrid-sortable">Avg CPC($)</div>
    </th>
    <th id="categories_totalCost" role="columnheader" class="ui-state-default ui-th-column ui-th-ltr" style="width: 99px;">
        <div id="jqgh_categories_totalCost" class="ui-jqgrid-sortable">Total Cost($)</div>
    </th>
    <th id="categories_convertToSale" role="columnheader" class="ui-state-default ui-th-column ui-th-ltr disabledHeader" style="width: 99px;">
        <div id="jqgh_categories_convertToSale" class="ui-jqgrid-sortable">CTS(%)</div>
    </th>
    <th id="categories_totalOrders" role="columnheader" class="ui-state-default ui-th-column ui-th-ltr disabledHeader" style="width: 99px;">
        <div id="jqgh_categories_totalOrders" class="ui-jqgrid-sortable">Total Orders</div>
    </th>
    <th id="categories_totalSales" role="columnheader" class="ui-state-default ui-th-column ui-th-ltr disabledHeader" style="width: 99px;">
        <div id="jqgh_categories_totalSales" class="ui-jqgrid-sortable">Sales($)</div>
    </th>
    <th id="categories_costOfSale" role="columnheader" class="ui-state-default ui-th-column ui-th-ltr disabledHeader" style="width: 96px;">
        <div id="jqgh_categories_costOfSale" class="ui-jqgrid-sortable">COS(%)</div>
    </th>
</tr>

并且需要找到有多少个标签有“disabledHeader”类或者至少得到一个特定的类(由id寻址)。

当我这样做时:

cl = b.th(:xpath, '//th[@id="categories_convertToSale"]')
cl.exist?
=> true
cl.inspect
=> "#<Watir::TableHeaderCell:0x..f9b976cc1015b866a located=true selector={:xpath=>\"//th[@id=\\\"categories_convertToSale\\\"]\", :tag_name=>\"th\"}>"
cl.class
=> Watir::TableHeaderCell

cl[@class]cl(:class)返回错误。

b.element(:class, "disabledHeader").size返回方法缺失错误。

如何解决此课程的所有th-s

2 个答案:

答案 0 :(得分:8)

Zeljko解决了有关计算与某些模式匹配的标签数量的问题。

关于获取某类内容,这取决于你所指的“类”的风格。

Ruby类

Ruby是一种面向对象的语言,对象由语言中的“class”关键字定义。 Watir使用它,并且具有与HTML对象平行的内部对象模型。在Ruby中,.class方法返回一个对象的类,它被硬连线到该语言中。 (实际上你不会看到watir rDocs中任何地方描述的.class方法)当你尝试看起来像这样的代码时,你正在做的事情

b.th(:id => "categories_convertToSale").class

=&GT;的Watir :: TableHeaderCell

它告诉你.th方法返回的对象类是watir'TableHeaderCell'(有关更多信息,请参阅TableHeaderCell Object和/或{{3}的watir rdoc })

HTML类属性

'class'的另一种风格是HTML类属性,它是HTML中几乎所有元素类型的标准属性。要实现这一点,您需要使用watir的.attribute_value方法以及要检查的属性,获取元素的属性值,或者像wahr中的任何对象,如与HTML元素类型相似的TableHeaderCell。

b.th(:id => "categories_totalCost").attribute_value("class")

答案 1 :(得分:5)

这应该这样做:

browser.ths(:class => "disabledHeader").size