2.App元素定位及常见API
一、App前端基础知识
1.App类型划分
2.App类型对比
应用类型 | 优点 | 缺点 |
Native | 直接依托于操作系统、交互性强、性能最好、功能最为强大 | 开发成本高、无法跨平台、更新缓慢、审核周期慢、维护成本高 |
web | 开发成本低、可以跨平台调试方便、更新无需通知用户、不需要手动升级、无需安装App、不会占用手机存储空间 | 无法获取系统级别的通知、提醒、动效等等、用户留存率低、体验较差、涉及受限制诸多 |
Hybrid | 开发成本低、可以跨平台调试方便、维护成本低、功能可复用、性能和体验要不web app好更新较自由 | 相比原生、性能仍然有较大损耗、不适用于交互性强的app |
3.App页面元素
分为布局和控件两种
常见布局:
FrameLayout:框架布局
LinearLayout:线性布局
AbsoluteLayout:绝对布局
RelativeLayout:相对布局
TableLayout:表格布局
常见控件:Button、ImageView、EditText、TextView…
二、App元素定位
1.id定位
id定位通过resource-id属性,有可能出现一个页面会有多个相同的resource-id值
androidDriver.findElement(MobileBy.id("xxx")).click();
2.text定位
androidDriver.findElement(MobileBy.AndroidUIAutomator("new UiSelector().text(\"xxxx\")"));
3.className定位(一般定位元素比较多,不推荐使用)
androidDriver.findElement(MobileBy.className("xxx"));
4.accessibility id定位
在UIAutomatorViewer并没有此属性,对应是content-desc属性
androidDriver.findElement(MobileBy.AccessibilityId(\"xxx\"));
5.xpath定位
App和web通用,此处不再介绍了
三、元素操作API
click():触发当前元素的点击事件
sendKeys():输入数据
clear():清空内容
getAttribute():得到clss属性
字符串类型属性:
content-desc:返回content-desc属性值
text:返回text
className:返回class
resourceId:返回resource-id
布尔类型属性同UiautomatorViewer里面保持一致
getText():获取当前元素的文本值(文本属性值)
四、androidDriver操作API
1.currentActivity()
当前正在前台运行的页面名,可以进行断言
//得到当前正在运行的activity String activity = driver.currentActivity(); System.out.println(activity);
2.getPageSource()
用于判断当前页面是否有某个元素或者页面有没有产生变化:如滚动判断是否已经到底端/顶端
driver.getPageSource();
3.其他信息获取类API
//获取设备时间信息 driver.getDeviceTime(); //获取设备DPI,注意不是分辨率 driver.getDisplayDensity(); //获取automation name,默认为null,如果有指定automation name为uiautomator2就为对应的值 driver.getAutomationName(); //获取设备横竖屏状态,有PORTRAIT(竖屏)与LANDSCAPE(横屏) driver.getOrientation();
4.pressKey()
//按键操作 KeyEvent keyEvent = new KeyEvent(); //点击返回按钮 keyEvent.withKey(AndroidKey.BACK); driver.pressKey(keyEvent);
5.getScreenshotAs()
//截图 File file = driver.getScreenshotAs(OutputType.FILE); try { FileUtils.copyFile(file,new File("C:\\Users\\86182\\Desktop\\test.png")); } catch (IOException e) { e.printStackTrace(); }
6.坐标点击
选择设置中关于手机->连续点击五次版本号->进入开发者选项->指针位置进行勾选
注意:坐标受屏幕尺寸、分辨率、DPI影响,一般情况不推荐使用此种方式
//坐标点击 TouchAction touchAction = new TouchAction(driver); //转化坐标 PointOption pointOption = PointOption.point(123,234); touchAction.press(pointOption).release().perform();