app自动化的特殊操作
一.截屏
File srcfile=driver.getScreenshotAs(OutputType.FILE); //得到截图源文件对象 File dstfile=new File("C:\\Users\\86130\\Desktop\\photo\\screenshot"); //生成本地文件的目标文件对象 try {
FileUtils.copyFile(srcfile,dstfile); //把截图源文件拷贝到目标文件中(以文件的形式保存到本地) } catch (IOException e) { e.printStackTrace(); }
二.点击坐标
开发者选项中勾选指针位置,手机页面增加坐标定位,触摸可得到位置的坐标
TouchAction touchAction=new TouchAction(driver); //得到TouchAction对象 PointOption pointOption=PointOption.point(140,1300); //通过touchAction提供的API,press需要传入pointoption类型的参数 touchAction.press(pointOption).release().perform(); //release:手指抬起;perform:让动作生效
注意:坐标点击受设备屏幕尺寸/分辨率/DPI影响,万不得已不要使用此种方式
三.手势操作-滑动
滑动场景有左右翻页,上下滑动,下拉刷新等
TouchAction touchAction1=new TouchAction(driver); int width=driver.manage().window().getSize().getWidth(); //获取屏幕的宽和高,通过比例来滑动屏幕,即使更换手机屏幕分辨率,也不影响代码的操作 int height=driver.manage().window().getSize().getHeight(); PointOption pointOption1=PointOption.point(width/2,height*2/3); //把坐标换为pointoption类型,press需要的参数 PointOption pointOption2=PointOption.point(width/2,height/3); Duration duration=Duration.ofSeconds(2); //把滑动时间换成waitaction类型,需要两步。先把时间换成duration类型,再把duration转换为waitoption类型 WaitOptions waitOptions=WaitOptions.waitOptions(duration); touchAction1.press(pointOption1).waitAction(waitOptions).moveTo(pointOption2).release().perform(); //按下滑动起始点到滑动终点,再释放
四.元素通过工具定位
由于有些页面做了截图限制,无法通过工具(元素定位工具,adb等)进行截图
(可通过adb命令验证页面是否做了限制:adb shell screencap -p /sdcard/test.png
举例:哔哩哔哩,银行系统,密码输入页面
通过getPageSource获取到当前页面源代码,再从获取到的页面源代码中找到需要的元素
driver.findElement(MobileBy.id("tv.danmaku.bili:id/avatar")).click();
System.out.println(driver.getPageSource()); //由于无法定位到哔哩哔哩登录页的元素,可通过getPageSource获取到当前页面的源代码,再从获取到的页面源代码中找到需要的元素
driver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text(\"密码登录\")")).click(); //此元素是从getPageSource()得到的源代码中获取到的
五.toast元素定位
Android中的Toast是一种简易的消息提示框。 当视图显示给用户,在应用程序中显示为浮动。和Dialog不一样的是,它永远不会获得焦点,无法被点击
toast元素定位可通过获取toast的text,找对应的text属性值中有包含未注册,请先注册关键字
By bypresent=MobileBy.xpath("//*[contains(@text,'未注册,请先注册')]");

浙公网安备 33010602011771号