一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的“Configurator类介绍”。
Configurator类用于设置脚本动作的默认延时,其作用如下。
l 可调节两个模拟动作之间的默认间隔。
l 可调节输入文本的输入时间间隔。
l 可调节每次滚动的时间间隔。
l 可调节等待系统空闲的默认时间。
Configurator的定义方法如下。
Configurator.getInstance()
Configurator类的API如表4-42所示。
案例4-39:Configurator类设置延时操作。
@Test
public void testConfigurator() throws UiObjectNotFoundException,InterruptedException {
Util util=new Util();
util.enterAPP();
UiObject appsTab = new UiObject(new UiSelector().text("Apps"));
appsTab.click();
//1.ActionAckonwledgmentTimeout()
long action= Configurator.getInstance().getActionAcknowledgmentTimeout();
//输出默认延时
Log.i("AAA","动作默认延时为: "+action); //默认是3000
//获取屏幕高度和宽度
int y=UiDevice.getInstance(getInstrumentation()).getDisplayHeight();
int x=UiDevice.getInstance(getInstrumentation()).getDisplayWidth();
//默认延时下动作间隔时间感受
UiDevice.getInstance(getInstrumentation()).swipe(x-10,y/2,x-200,y/2,10);
UiDevice.getInstance(getInstrumentation()).swipe(x-10,y/2,x-200,y/2,10);
Thread.sleep(2000);
//修改延时
Configurator.getInstance().setActionAcknowledgmentTimeout(100000);
//使用设置延时下动作间隔时间感受
UiDevice.getInstance(getInstrumentation()).swipe(x-10,y/2,x-200,y/2,10);
UiDevice.getInstance(getInstrumentation()).swipe(x-10,y/2,x-200,y/2,10);
//使用完毕后调回默认延时,切记!!!
Configurator.getInstance().setActionAcknowledgmentTimeout(action);
//2.KeyInjectionDelay()
long print=Configurator.getInstance().getKeyInjectionDelay();
//输出键盘输入默认延时
Log.i("AAA","键盘输入默认延时为: "+print); //默认是0
new UiObject(new UiSelector().className("android.widget.TextView").index(0)).click();
UiScrollable appViews = new UiScrollable(new UiSelector().scrollable(true));
UiObject settingsApp = appViews.getChildByText(
new UiSelector().className(android.widget.TextView.class.getName()),"Demo4");
settingsApp.clickAndWaitForNewWindow();
//获取输入框
UiObject set=new UiObject(new UiSelector().resourceId("com.example.demo4:id/username"));
//感受默认延时下输入间隔
set.setText("aabbccd");
Thread.sleep(2000);
set.clearTextField();
//修改默认延时为3秒
Configurator.getInstance().setKeyInjectionDelay(3000);
//感受修改延时后输入间隔
set.setText("aabbccd");
Thread.sleep(2000);
set.clearTextField();
//切记改回原始时间
Configurator.getInstance().setKeyInjectionDelay(print);
//3.ScrollAcknowledgmentTimeout()
long scroll=Configurator.getInstance().getScrollAcknowledgmentTimeout();
//输出默认延时
Log.i("AAA","滚动默认延时: "+scroll); //默认是200
//获取列表集合
UiScrollable scroll1=new UiScrollable(new UiSelector().className("android.widget.EditText"));
//感受默认滚动延时间隔
scroll1.flingToEnd(5);
//设置默认滚动时间间隔为2S
Configurator.getInstance().setScrollAcknowledgmentTimeout(2000);
//感受设置后的滚动时间间隔
scroll1.flingToEnd(5);
//切记使用完毕改回为默认时间间隔
Configurator.getInstance().setScrollAcknowledgmentTimeout(scroll);
//4.WaitForIdleTimeout()
long wait=Configurator.getInstance().getWaitForIdleTimeout();
Log.i("AAA","空闲默认延时为: "+wait); //默认是1000
//5.WaitForSelectorTimeout()
long selector=Configurator.getInstance().getWaitForSelectorTimeout();
//输出默认时间间隔
Log.i("AAA","查找组件默认延时为 :"+selector); //默认是1000
//随意查找一个对象
UiScrollable scroll2=new UiScrollable(new UiSelector().resourceId("com.example.demo4:id/username"));
scroll2.click();
//修改默认时间间隔
Configurator.getInstance().setWaitForSelectorTimeout(1000);
//感受修改后的时间间隔
UiScrollable scroll3=new UiScrollable(new UiSelector().resourceId("com.example.demo4:id/password"));
scroll3.click();
}
通过Configurator类的这些方法可以实现“模拟双击与快速多单击动作”与“使用keyCode快速输入”代码分别如下。
案例4-40:模拟双击与快速多单击动作。
public void quicklyClick(int num,int x,int y){
//获取动作间隔时间
long actionTime=Configurator.getInstance().getActionAcknowledgmentTimeout();
//设置动作间隔时间
Configurator.getInstance().setActionAcknowledgmentTimeout(0);
//设置操作步骤
for(int i=0;i<=num;i++){
UiDevice.getInstance(getInstrumentation()).click(x,y);
}
//最后别忘了恢复默认时间间隔,避免影响后面其他的用例
Configurator.getInstance().setActionAcknowledgmentTimeout(actionTime);
}
把这段代码放入util.java 中,可以通过如下方法调用。
@Test
public void testQuicklyClick() throws UiObjectNotFoundException {
Util util=new Util();
util.enterAPP();
//获取屏幕高和宽
int y=UiDevice.getInstance(getInstrumentation()).getDisplayHeight();
int x=UiDevice.getInstance(getInstrumentation()).getDisplayWidth();
util.quicklyClick(4,x/2,y/2);
}
案例4-41:使用keyCode快速输入。
public void quicklyKeyCode(String input){
//获取动作间隔时间
long action=Configurator.getInstance().getActionAcknowledgmentTimeout();
//设置动作间隔时间
Configurator.getInstance().setActionAcknowledgmentTimeout(1);
//方法中用到的数字来自androidKeyCode表
for (int i=0;i<input.length();i++){< p="">
char c=input.charAt(i);
//判断输出
if (c>48&&c<=57){
UiDevice.getInstance(getInstrumentation()).pressKeyCode(c-41);
}else if(c>=97&&c<=122){
UiDevice.getInstance(getInstrumentation()).pressKeyCode(c-68);
}else if (c>=65&&c<=90){
UiDevice.getInstance(getInstrumentation()).pressKeyCode(c-36,1);}}
//千万别忘记恢复默认
Configurator.getInstance().setActionAcknowledgmentTimeout(action);}
也把这段代码放入util.java 中,可以通过如下方法调用。
@Test
public void testQuicklyKeyCode() throws UiObjectNotFoundException {
Util util=new Util();
util.comming("Demo4");
util.quicklyKeyCode("jerry");}
断言
由于UiAutomator使用的是JUnit4框架,所以所有Junit4的断言在这里都可以使用。
使用JUnit4的框架进行调整
正如前面所说,由于UiAutomator使用的是JUnit4框架,所以可以利用@Before与@After对代码进行优化。
案例4-42:利用@Before的优化代码。
@Before
public void setup(){
instrumentation = InstrumentationRegistry.getInstrumentation();
UiDevice.getInstance(instrumentation).pressHome();
}
在所有测试用例开始,先初始化Instrumentation实例,然后点击【HOME】键准备进行测试。
案例4-43:利用@After的优化代码。
@After
public void Tear() throws RemoteException,UiObjectNotFoundException {
UiDevice.getInstance(instrumentation).pressHome();
Util util=new Util();
util.deleteAPP(instrumentation);
}
在所有测试用例结束,先点击【HOME】键把页面返回初始状态,然后调用util类中的deleteAPP方法把打开的APP全部关闭。