安卓自动化测试总结(三)--WaitFor方法、超时时间

使用WaitForView提高控件点击成功率

    开发界面自动化的代码时,难以避免的一个问题是,因某些原因导致控件延时显示,而这时点击控件或在控件中输入文本时,就会导致失败或异常。

    我们通常的做法是,在代码前添加一个等待语句,在该等待之后,控件应该能出现。如,

solo.sleep(10000);//等待10秒

solo.clickOnView(view);

    不过,由于等待时间并不确定,认为较长的等待时间,也许还不够长,仍然会有对应控件尚未出现的情况;而如果每个等待都设置较长的等待时间,又会造成大量的时间浪费,导致自动化运行效率不高。因而,我们封装时,可考虑封装成:

if(solo.waitForView(view)) {

solo.clickOnView(view);

}

    上面的判断,如果能够找到对应的view,则不用等待,立即返回true;如果在默认超时时间(20秒)前找到view,则也返回true;否则返回false。通过这个判断,可以比设置常量效率高很多,因为这既可以保证在较长时间出现控件时,仍能找到控件,也能在立即出现控件后,不用等待即可进行后续操作。

    有时,默认的20秒可能不够,或者控件不在当前界面,可以考虑封装成

if(solo.waitForView(view),timeout时间,true) {

solo.clickOnView(view);

}

这时,超时时间就是timeout时间,而不是默认的了。

Robotium提供的WaitFor方法

    为了提高找到对应界面控件的成功率,Robotium提供了很多WaitFor方法,这些方法如包括waitForText、waitForView、waitForWebElement、waitForCondition、waitForActivity、waitForLogMessage、waitForFragmentById、waitForDialogToClose、waitForDialogToOpen等。其中,各种不同参数的WaitForView方法如下,其他方法类似,但参数种类不如WaitForView方法多:

boolean waitForView(Class viewClass)

     Waits for a View  matching the specified class.

boolean waitForView(Class viewClass,  int minimumNumberOfMatches, int timeout)

boolean waitForView(Class viewClass,  int minimumNumberOfMatches, int timeout, boolean scroll)

boolean waitForView(int id)

boolean waitForView(int id, int minimumNumberOfMatches, int timeout)

boolean waitForView(int id, int minimumNumberOfMatches, int timeout, boolean scroll)

boolean waitForView(Objecttag)

boolean waitForView(Objecttag,  int minimumNumberOfMatches, int timeout)

boolean waitForView(Objecttag,  int minimumNumberOfMatches, int timeout, boolean scroll)

boolean waitForView(android.view.View view)

boolean waitForView(android.view.View view,int timeout, boolean scroll)

超时时间

    Robotium的默认超时时间为20s,这个时间也是可以改变的,而且有最大超时和最小超时。最大超时就是应用于我们前面提到的waitFor方法。

TimeOut类提供的方法如下:

static int getLargeTimeout()

     Gets the default  timeout length of the waitFor methods.

static int  getSmallTimeout()

     Gets the default  timeout length of the get, is, set, assert, enter, type and click methods.

static void  setLargeTimeout(int milliseconds)

     Sets the default  timeout length of the waitFor methods.

static void  setSmallTimeout(int milliseconds)

     Sets the default  timeout length of the get, is, set, assert, enter, type and click methods.

    虽然Robotium本身提供的方法的稳定性和成功率越来越高,但针对自己的产品,我们可以使用Robotium提供的WaitFor方法和超时时间等,对不同的界面及控件类型,采用更好的实现策略;通过组合这些方法,进行恰当的封装,可以即提高自动化执行的效率,又能提高执行的成功率,也提高代码编写的效率。感兴趣的,可以自己也试下。

你可能感兴趣的:(安卓自动化测试总结(三)--WaitFor方法、超时时间)