我在扩展表格/行时遇到问题。我做了一些谷歌搜索,没有找到任何关于这种情况的信息。
基本上我有一个包含5个左右列的表。单击时将展开表格并显示更多信息。在这个新信息里面是一个试图点击的按钮。
以下是表iself的行的HTML:
<thead>
<tbody>
<tr class="odd" data-row="0" data-source="/user/01" role="row">
<td class="sort_1">John Doe</td>
<td>Person</td>
<td>Yes</td>
<td>Yes</td>
<td> Building 2 </td>
</tr>
<more table rows here repeated>
</tbody>
</table>
表html本身有一个id和所有内容,但是我需要点击行本身中的任何一列以使其扩展。
我尝试了这个:page.find('td', :text => 'John Doe').click
虽然它确实成功了,但是在截取屏幕截图之后它似乎没有显示任何扩展...所以我不确定扩展表是否适用于此实例。然而,重新运行它,它工作....但它不一致。
poltergeist展示的屏幕截图显示扩展表几乎没有显示(就像只是一小部分扩展)。那么也许它没有等待它出现的足够时间?我不确定。
当表格展开时,它基本上会生成一个新的<tr user-data-row="5">
,在展开时会显示在上面的行下方。
这里的参考是我在扩展后点击的按钮的HTML:
<div class="col-xs-12 col-sm-5 col-md-5" style="">
<ul class="list-unstyled">
<ul class="list-inline">
<li>
<a class="btn btn-sm btn-default" href="/stuff/site" data-method="post" rel="no-follow" data-confirm="Generic: Confirmation Dialogue">The Button</a>
</li>
<li> </li>
</ul>
</div>
我起初认为它正在绊倒确认对话弹出窗口,但是Poltergeist应该默认避开那些。而且似乎这样做......所以我不确定可能出现什么问题。由于它不一致我想可能这是一个时间问题。我的Capybara.default_max_wait_time = 15
因为数据库在虚拟机上,但到目前为止它还不是问题....
编辑: 失败的代码似乎在此之后: page.find('td',:text =&gt;'John Doe')。点击 click_link('The Button')
它似乎在50%的时间内起作用。
答案 0 :(得分:2)
当使用一些带动画的Capybara驱动程序时,点击可能会错过目标。发生这种情况是因为计算了鼠标单击发生的位置,创建了鼠标事件,并将其提交到“浏览器”队列进行处理。在处理事件之前,目标元素可能移动到足以使点击错过元素。有几种方法可以处理这个
全方位的最佳解决方案(鼠标事件的速度,可靠性和有效性)是在测试环境中禁用动画。这通常可以通过根据所使用的库有条件地设置一些JS变量来完成。
在尝试点击之前暂停一小段时间以便动画有时间完成 - 这个速度较慢,但仍然保持“实际”鼠标点击,这些点击会像用户那样通过页面事件处理。
使用#trigger来模拟点击 - element.trigger(:click)
- 这会很快但可能会缩短很多事情,以确保测试有效地复制用户可以做的事情,因此可以导致错过失败的测试。它应该用作最后的方法