好,接下来点击了拍照按钮之后,拍照功能还会让你选择是确定还是取消操作,如下图(4)所示:

图(4)
那么如法炮制,我们通过查询获知,这个用于确定的“√”按钮,它的属性能用于定位的其实只有class属性。不过这里要注意的是,此时由于我们用的是class属性,大家可以看到界面上class属性跟我们要点击的“√”这个按钮相同的对象很多,所以我们必须用findElementsByClass方法了。这个方法返回的是一个ArrayList<Element>,所以我们可以写如下的代码来获取所有class属性为”android.widget.ImageView”的元素列表。
ArrayList<Element> imageViews =position.findElementsByClass("android.widget.ImageView");
好,写完之后,现在问题来了,究竟这个数组里面哪个index才是对应的我们要点击的“√”按钮呢?经过试验,我发现界面上多个相同元素返回到数组中时,对应元素位置是按照界面上的位置从上到下、从左到右来的,所以我们要点击的这个按钮的index应该是4。所以点击它的代码如下:
adbDevice.tap(imageViews.get(4)); //2是x,3是重拍,4是√
上面的代码运行完后,界面就会回到我们的被测程序,后面的操作就不用我再多说了,大家看看是不是非常简单?
例子2、跨进程操作之打电话
有了第一个例子的基础,其实第二个例子就很好实现了。被测程序非常简单,如下图(5)所示:
图(5)
点击“该号码”后,系统自动进入拨号界面,所以也是典型的跨进程测试场景。
实现方法还是跟例1中一样,先还是用uiautomatorviewer查看界面中的对象信息,再使用对应的方法来操作对象即可。而且在这个例子中,我还给大家演示了另外一种情况,即有些跨进程操作不但要进行操作,还要取得一些对象属性来进行验证,这也是基本可以的。这里我直接给出我的测试代码(稍微封装了一下):
public boolean CallUtil(String callNumber){
Element element;
boolean result;
//验证是否了正确的号码
if(callNumber.length() == 11){//正常号码需要转变为 x xxx-xxx-xxxx的格式
StringformatCallNumber = callNumber.substring(0, 1) + " " +callNumber.substring(1, 4) + "-" + callNumber.substring(4,7) +"-" + callNumber.substring(7, callNumber.length());
element= position.findElementByText(formatCallNumber);
try{
Thread.sleep(2000); //线程休眠2秒
}catch (InterruptedException e) {
e.printStackTrace();
}
}else{
element= position.findElementByText(callNumber);//除正常号码外,其他格式的号码不进行格式转换
}
if(element != null){
result= true;
}else{
result= false;
}
element= position.findElementByContentdesc("End"); //挂断电话
if(element != null) adbDevice.tap(element);
return result;
}
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-37530-3.html
为每日做事
人口只及中国的十分之一
一会儿又说要解除伊拉克的武装要入侵伊拉克
跑到浙江这些粗制滥造的工厂去