iOS UIAutomation中执行语句时默认的超时时间

测试代码运行中有这样一种情况:

同样的语句,在有的时候运行很快,有时候运行很慢。

这时因为automation内部的超时机制,当你的语句尝试获取或者是操作某个元素,而当前界面又没有这个元素时,automation会有一个超时时间,它会在这期间不停的尝试重复执行这条语句直到操作成功,如果超时时间结束后仍然无法完成这个操作,那么这条语句才会失败并抛出异常。automation默认的超时时间是5秒。

虽然这个设定一定程度上提高了测试脚本的健壮性,但是在个别的时候,它会影响脚本的执行效率。因此,当我们需要时,我们可以修改这个超时时间。

有三个相关的方法

pushTimeout(1) :把自定义的超时时间(1s)入栈,此后的超时时间都变为1s (automation采用栈来存储这个超时时间,默认栈底的时间就是系统的5s)

popTimeout():出栈,通常和上面这条语句搭配使用,用以恢复默认超时时间(5s)

setTimeout(1):和上面的栈操作不同,这个方法直接改变默认的超时时间,具有全局效应。不建议使用。

pushTimeout和popTimeout搭配起来可以灵活的处理超时时间,在有必要的地方使用以提高测试脚本的效率。

举个栗子

function waitForDownloadResult() {
    UIATarget.localTarget().pushTimeout(0.5);
    var temp =4;
    while (temp>0) {
	if (window.staticTexts()["任务创建成功"].isValid()) {
	    screenShoot("任务创建成功");	 
	}
	if (window.staticTexts()["任务已创建"].isValid()) {
	    screenShoot("任务已创建");
	}
	temp -= 1;
    }
    UIATarget.localTarget().popTimeout();
}
在等待捕获一闪而过的提示语(1.5s),如果不修改超时时间,当提示语是"任务已创建"的时候,是无法捕获到的,因为第一个if语句就会卡住5s,在此期间提示语就已经消失了。


你可能感兴趣的:(ios,timeout,automation,自动化测试,instruments)