【发布时间】:2016-08-17 07:45:19
【问题描述】:
只是想知道,有没有一种方法可以告诉 Capybara 在元素加载后立即单击它,而不是等待整个页面加载?我有一个单独的步骤,每次测试都会增加 40 秒,因为它正在调用 3rd 方服务。
我想要单击以进入下一步的元素是首先加载到屏幕上的元素之一。
让每个场景都等待 40 秒似乎是在浪费测试时间。
我已经在网上拖网,但找不到解决方案。
【问题讨论】:
标签: capybara
只是想知道,有没有一种方法可以告诉 Capybara 在元素加载后立即单击它,而不是等待整个页面加载?我有一个单独的步骤,每次测试都会增加 40 秒,因为它正在调用 3rd 方服务。
我想要单击以进入下一步的元素是首先加载到屏幕上的元素之一。
让每个场景都等待 40 秒似乎是在浪费测试时间。
我已经在网上拖网,但找不到解决方案。
【问题讨论】:
标签: capybara
Capybara 何时首次与页面交互取决于您使用的驱动程序以及额外页面数据的加载方式(异步、从 setTimeout、内联等触发)。由于您似乎并不真正关心从 3rd 方服务返回的数据,因此您可能最好使用类似 puffing-billy 的东西,它提供与 Capybara 一起使用的可编程代理,您可以用来伪造响应在需要时从服务中获取,和/或阻止连接尝试。另一种选择是使用某些驱动程序提供的黑名单(显然取决于您与 Capybara 一起使用的驱动程序)来阻止与 3rd 方服务的连接。
【讨论】:
据我所知,Capybara 应该能够自动等待元素,所以在这个例子中:
page.find("#foo").should have_content("login failed")
它会自动等到#foo 元素出现login failed 文本。
默认等待时间应该可以通过Capybara.default_wait_time设置来配置。
【讨论】: