不同的控件进行定位的时候经常会出现不同的问题,如果想做一个通用的平台就更难了。我们已经被各种弹框各种中断各种webview折磨的时候就不要再来一些小插曲了晒。下面是一些控件定位的小技巧。掌握这些技巧希望以后能轻松一些
1、关于没有name,没有ID的元素的定位
因为没有name,id;定位方式我们可以用xpath,或者className。xpath可以用or进行选择比较适合通用模板。但是classname直接简单也是不错的选择
我的方法:
用className获取所有该类型的元素;
根据元素的位置确定元素的index;
获取目标元素。
示例:
List lis = driver.findElementsByClassName("Android.widget.ImageView");//获取ImageView的所有元素
WebEelement targetEle = lis.get(0);//获取列表中第一个元素
2、关于没有name,没有ID的元素的定位---特用篇
因为是特用,所以需要对页面元素做进一步的分析,找出其中的特性。这些特性主要为className,index,以及clickable等属性。
场景1:同一个页面有10个ImageView对象,而我们的目标元素的index为4,而同为ImageView且index为4的页面只有2个。那我们就可以根据这2个条件来组合查询条件,提高效率。
示例:
List lis = driver.findElementsByAndroidUIAutomator("new
UiSelector().className("+"android.widget.ImageView"+").index(4)");
基于这个场景可以封装一个方法:
public List getElementsByClassAndIndex(String classname,int
index){
List lis =null;
lis = driver.findElementsByAndroidUIAutomator("new
UiSelector().className("+classname+").index("+index+")");
return lis;
}
3、场景:同一个页面有10个ImageView对象,而其中index为4的有5个,而这时我们发现我们的目标元素的是clickable的。然后review页面发现,同时满足上述条件的只有2个。那么。。。
示例:
List lis =
driver.findElementsByAndroidUIAutomator("new
UiSelector().className("+"android.widget.ImageView"+").index(4).clickable(true)");
4、场景:在分析页面元素的时候发现,页面相对比较简单,而且其中只有目标元素的index为4.
示例:
driver.findElementByAndroidUIAutomator("new
UiSelector().index("+index+")");
5、关于输入框有默认text,且当你选中时,不会清空的清空的处理。
类似的情况,用element.clear()是没有效果的。那怎么办呢? 不急,appium提供了很多的操作,直击不行,我们就上组合拳。
示例:
public void clear(WebElement el){
el.click(); //选中输入框
driver.sendKeyEvent(123);//将光标移到最后
String txt = el.getText(); //获取字符串长度
for(int i=0;i
driver.sendKeyEvent(67);//一个个的删除。。。。。
}
}