如何使用Watir :: Browser#speed =方法控制watir-webdriver中的测试执行速度?

时间:2015-12-24 19:01:33

标签: ruby watir watir-webdriver

有没有办法控制watir中的测试执行速度?如何降低测试执行的速度?

有人建议我使用以下方法browser.speed = :slow,但是,目前使用的浏览器驱动程序Watir :: Browser类没有这样的方法。

1 个答案:

答案 0 :(得分:1)

速度默认为慢

根据文档,Watir::Browser#speed=已默认为:slow。但是,据我所知,更改此选项仅对Internet Explorer有效,对其他浏览器没有影响。实际上,使用Chrome或Firefox时,构造函数将不接受速度参数,并且不为该选项提供公共接口。

但是,与大多数Ruby一样,您总是可以直接访问变量并进行调整。这可能适用于您的用例,也可能不适用,但您当然可以这样做:

browser = Watir::Browser.new :chrome
#=> #<Watir::Browser:0x..fee868224270c4e1c url="data:," title="data:,">

browser.instance_variable_set :@speed, :slow
#=> :slow

browser.instance_variable_get :@speed
#=> :slow

其他替代方案

在实践中,测试浏览器通常涉及大量异步JavaScript事件,因此您可能希望等待事件或元素,而不是试图减慢测试本身。为此,您可以使用显式或隐式等待。

隐式等待

您可以在几秒钟内添加隐式等待。例如,要为每个事件或元素等待最多30秒:

browser.driver.manage.timeouts.implicit_wait = 30

明确等待

Watir同时支持Watir::Wait#untilWatir::Wait#while。例如,要等到登录字段可见:

Watir::Wait.until { browser.text_field(name: 'login').visible? } 

使用睡眠

在幕后,Watir是Ruby,所以你也可以使用Kernel#sleep将明确的睡眠放入你的测试中。这样做的主要缺点是它没有响应。即使您正在等待的事件或元素触发或更改,您的代码也会在指定的时间段内休眠。这可能会使您的测试变得不必要地慢。