在加入睡眠前按黄瓜,水豚测试按钮时没有任何反应

时间:2013-12-02 10:27:02

标签: button selenium cucumber capybara

我遇到一个问题,我的页面上有一种优惠券,如果按下几个不同的按钮,这个优惠券会有所改变。

然而,在一个案例中,似乎我无法在找到元素和按下按钮之间没有添加睡眠时单击特定按钮。

非工作代码:

element = page.find("[for='someButton']"])
element.click()

工作代码:

element = page.find("[for='someButton']"])
sleep 2
element.click()

我想知道我是否可以采取任何措施来解决这个问题,而无需增加睡眠,因为我担心这会使我的测试更加脆弱,并导致不必要的延迟

PS。 没有错误被抛出,我自己也没有编写Web应用程序。然而,我确实与实现此页面的人交谈,他说这个按钮应该没有什么特别之处,并且一旦页面加载就应该添加它的事件监听器

1 个答案:

答案 0 :(得分:2)

如果在绑定click事件处理程序之前在DOM中呈现按钮,则可能会发生这种情况。 Capybara将能够在DOM中尽快找到该元素。

如果是这种情况,测试实际上会向您显示存在(次要)错误。在页面仍在加载时单击按钮的真实最终用户将看到相同的结果。更清晰的选择是通过JavaScript呈现按钮并同时绑定点击处理程序。

如果您不想更改页面,可能仍有希望。如果页面上有其他内容由JavaScript在事件循环的同一次迭代中呈现,则可以在尝试单击按钮之前向测试中添加一些内容。例如,在我工作的应用程序中,我们在加载时在页面上呈现动画微调器GIF,然后在页面完全加载时隐藏在JavaScript中。在与页面交互之前,我们的Capybara测试会等待微调器GIF被隐藏。