一.元素定位
需要注意的是每一种定位方式在界面上都可能存在多个属性值相同的元素
- findElementById(String id) 通过元素的resource-id的值进行查找元素
AndroidElement ele=driver.findElementById(“com.zhihu.android:id/login_and_register”);
- findElementByName(String using 通过元素的text属性值或者content-desc属性值进行查找元素
AndroidElement ele=driver.findElementByName(“登录或注册”);
- findElementByClassName(String using) 通过元素的class属性值进行查找元素
AndroidElement ele=driver.findElementByClassName(“android.widget.Button”);
- findElementByXpath(String using) 通过xpath表达式去定位元素
AndroidElement ele=driver.findElementByXpath(“//android.widget.Button[@text=’登录或注册’]”);
- findElementByAndroidUIAutomator(String using) 通过uiautomator定位方法查找元素
AndroidElement ele=findElementByAndroidUIAtomator("new UiSelector().text("登录或注册")")
- findElement(By by) 以by对象作为参数查找元素
findElement(By.id(String id))
findELement(By.name(String using))
findElement(By.classname(String using))
findElement(By.xpath(String using))
这个方法的返回值和1-4的一样的,传参也一样,如:
AndroidElement ele=driver.findElement(By.id(“com.zhihu.android:id/login_and_register”));
- 定位多个元素时只要将findElement改成findElements就行,如下
List<AndroidElement> eleList=driver.findElementsById(“xxxxx”);
或者
List<AndroidElement> eleList=driver.findElements(By.id(“xxxxx”));
当获取到多个相同元素为一个集合时,要操作其中一个,可以使用索引进行指定操作,比如要操作点击第2个(索引从0开始,所以点击第2个元素的索引是1)
eleList.get(1).click();
当需要遍历这个集合元素时,使用如下
for(AndroidElement ae:eleList){
ae.click();
//点击后如果不在当前界面,这里需要一行“返回”操作的代码
}
二.元素常用操作
2.1 元素点击
element.click()
2.2 输入内容
element.sendKeys(“xxxxx”)
2.3 清空输入框
element.clear()
另外一种清空方法(逐个删除)
element.click();//先点击一下元素确定光标焦点
driver.pressKeyCode(123);//将光标置于当前的最后
for(int i=0;i<element.getText().length();i++){
driver.pressKeyCode(67);//删除
}
2.3 获取元素某个属性值(不能获取password,package,index,bounds这三个属性,”content-desc”使用contentDescription)
element.getAttribute("text");
2.4 获取该元素的中心点坐标
int x=element.getCenter().getX();//元素中心点的x坐标值
int y=element.getCenter().getY();//元素中心点的y坐标值
2.5 获取该元素的起始点坐标
int x= logout.getLocation().getX();//元素的起始x坐标值
int y=logout.getLocation().getX();//元素的起始y坐标值
2.6 获取该元素的宽高
int width=element.getSize().width;//元素的宽
int height=element.getSize().height;//元素的高
2.7 元素滑动
element.swipe(SwipeElementDirection.UP, 20,20,500);//向上滑动
element.swipe(SwipeElementDirection.DOWN, 20,20,500);//向下滑动
element.swipe(SwipeElementDirection.LEFT, 20,20,500);//向左滑动
element.swipe(SwipeElementDirection.RIGHT, 20,20,500);//向右滑动
2.8 元素长按
TouchAction ta=new TouchAction(driver);
ta.longPress(element).release().perform();
2.9 获取元素的文本值
String text=element.getText();
2.10 替换元素的文本值(可以作为输入的另一种方式)
element.replaceValue("txt");
2.11 tap的几种用法
element.tap(1,50)//单击
三.driver常用方法
3.1 启动其他app,用例之间的衔接(每个用例都是单独从首页开始执行,因为不能确认上1个用例执行完后到底停留在哪个页面)
driver.startActivity(“appPackage”,”appActivity”);
driver.startActivity(“appPackage”,”appActivity”,”appWaitActivity”);
3.2 获取当前activity
String curActivity=driver.currentActivity();
3.3 获取当前网络状态
driver.getNetworkConnection();
3.4 获取当前context
driver.getContext();
3.5 获取当前界面所有资源
driver.getPageSource();
3.6 获取当前appium settings设置
driver.getSettings();
3.7 获取当前所有context
driver.getContextHandles();
3.8 获取当前sessionid
driver.getSessionId();
3.9 获取当前设备的方向(横屏还是竖屏)
driver.getOrientation();
3.10 设置当前ignoreUnimportantViews值
driver.ignoreUnimportantViews(true);//在true和false可以随时切换
3.11 安装app
driver.installApp("C:\Users\lixionggang\Desktop\xinchangtai.apk");
3.12 重置app,会重置app的数据
driver.resetApp();
3.13 卸载app
driver.removeApp("apppackage");
3.14 打开通知栏
driver.openNotifications();
3.15 tap点击
driver.tap(int fingers,WebElement element,int duration)//方法定义
第一个参数是指点击次数,第二个是点击对象,第三个是点击间隔时间
driver.tap(1, element, 50);//点击元素element
driver.tap(int fingers,int x,int y,int duration)//方法定义
第一个和最后一个参数同上,中间两个是要点击的点的坐标
driver.tap(1, 540, 540, 50);//点击坐标(540,540)
3.16 滑动
driver.swipe(int startx,int starty,int xend,int yend,int duration )
前两个参数是滑动起始点的坐标,中间两个参数是滑动结束点的坐标,最后一个是持续时间
driver.swipe(300,300,300,1000,500);
3.17 设置网络连接
数字0代码全断开,1代表开启飞行模式,2代表开启wifi,4代表开启数据流量
NetworkConnectionSetting network=new NetworkConnectionSetting(2);
driver.setNetworkConnection(network);
3.18 设置隐式等待(全局等待)
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
3.18 获取app应用占据屏幕的大小
int width=driver.manage().window().getSize().getWidth();
int height=driver.manage().window().getSize().getHeight();