3

我正在尝试将我的旧 watir 脚本转换为使用 watir-webdriver,因为这将(最终)支持 IE9 和 Firefox 4。$browser.table_row(:id => "account_1").click我曾经在 watir/firewatir 中单击屏幕上表格的第一行,但是对此的 API 在 watir-webdriver 中进行了修改。现在,代码是这样的:$browser.table(:class => "sortable")[0].click它应该抓取表格的第一行,然后单击它。它似乎是成功的,因为它继续执行代码,但实际上并没有单击该行。

有人可以解释在这种情况下正确的语法是什么吗?

这是我要单击的区域周围的源代码:

<table class="sortable">
<thead>
    <tr id="">
        <th> </th>
        <th class="sort" > Name </th>
        <th class="sort" > Number </th>
    </tr>
</thead>
<tbody>
    <tr id="account_1" onclick=";$('timer').show();; new Ajax.Request('create_new_account', {asynchronous:false, evalScripts:true, onComplete:function(request){;$('timer').hide();initializeCustomEffects();}})">
        <td></td>
        <td class="sortTd">Test Account</td>
        <td class="sortTd">1</td>
    </tr>
</tbody>

4

2 回答 2

5

您的代码正在查找表的第一行,该行位于内部<thead>并且没有 onclick 处理程序。试试这个:

browser.tr(:id => "account_1").click

这是一个演示该行为的脚本这里是修改后的表 API 的概述。

于 2011-04-19T21:45:55.030 回答
3

Row 不是通常会响应点击的 HTTP 对象。行内是否有您想要单击的链接之类的东西,或者行本身是否使用事件处理设置来响应特定事件,例如“onclick”或“onmousedown”?

如果是前者,请尝试实际单击行内的对象。如果是后者,请尝试使用 .fire_event 方法和不同的事件。

例如:

browser.table(:class => "sortable")[0].fire_event("onmousedown") 

或许

browser.table(:class => "sortable").row(:index, 0).fire_event("onmousedown")

(附录)啊,现在我们有了 HTML,我们可以看到 onclick 处理程序在哪里,正如 Jarib 指出的那样,您正在单击标题行(从技术上讲,这是表格的第一行)单击您想要的东西,你需要一些类似的东西

browser.row(:id, "account_1").click
browser.row(:text, /Test Account/).click
browser.table(:class => "sortable").row(:index, 1).fire_event("onclick")

(除非您的意图是对表格进行排序,在这种情况下,我怀疑您需要单击第一(标题)行中的 CELL 才能对该列上的表格进行排序。

browser.cell(:text, ' Name ').click
于 2011-04-19T20:06:21.867 回答