Appium组件
Appium Server
- Appium的核心,实质上是一个web接口服务器,使用node.js实现
Appium GUI
- Appium Desktop的前身,已停止维护
Appium Decktop
- 内嵌Appium server,提供了GUI界面,还有许多工具整合(Appium Inspector)
Appium Client
- Appium 向客户端发起请求,支持多种语言
Appium Decktop配置
基本配置介绍
simple(简单模式)
advanced(高级模式)
presets(预设)
简单启动
- simple的host:127.0.0.1(本地)
- Port:4723
- 也可以通过预设启动
- 右上角分别代表 开启探测对话(Inspector),生成日志,停止服务器
Inspector工具配置
- 启动安卓模拟器
- 启动服务器
- 点击放大镜图标,启动Insector对话
- Automatic server 自动获取服务端配置(主要)
- Desired Capabilities 启动app(deviceName)
- cmd窗口输入adb devices
- 若无法找到对应服务
- 手动连接:adb connect 127.0.0.1:62001(夜神模拟器端口号)
- adb device检测 值为127.0.0.1:62001
- 确认测试平台(platformName)
- 值为Android
- 找到app(appPackage)
- 借助SDK工具,进入SDK目录的build-tools\28.0.3\在地址栏输入cmd
- aapt dump badging (直接将安装包拖入)
- 解析完成后获取package:name
- 启动(appActivity)
- Launchable- activity:name
-启动完成
- Launchable- activity:name
- Desired Capabilities 启动app(deviceName)
- Custom Server 定制服务
- Select Cloud Providers 选择云端服务
UIAutomatorViewer
- SDK自动元素探测工具
- 不需要提高启动参数
- 效率高
- SDK\tools\uiautomatorviewer.bat工具
- 选择第二个按钮
- 自动获取当前页面信息
包名&类名
- PackageName
- 应用的唯一身份标识,系统通过包名识别不同的应用,如两个相同包名的应用在安装是会提示覆盖
- ActivityName
- Activity:android四大组件之一,简单来说就是一个界面,和用户进行交互
- 获取App入口Activity
- adb shell dumpsys activity | find “mFocusedActivity”
- u0与\中间的是PackageName
- \与空格之间的为ActivityName
App类型
Native App
Hybird App
- 混合式app,包含webview
Web App
adb
- adb help查看帮助
- adb devices检测连接到电脑的安卓设备
- adb pull <手机路径><本机路径>从安卓设备中拉取文件到电脑
- adb push <本机路径><手机路径>从电脑推送文件到安卓设备
- adb shell 切换shell模式
- -p monkey number压力测试
- adb install <apk路径>安装app
- adb uninstall <包名>卸载app
- adb shell dumpsys activity | find “mFocusedActivity”查找当前包名
- adb kill-server终止adb
- adb start-server开始adb
- adb shell am start -n 包名/入口名 启动app
- adb shell pm clear 包名清除缓存数据
- adb shell input tap x坐标 y坐标 坐标点击
- adb shell pm list packages列出所有包名
- -s列出系统apk包名与路径
- -3列出用户apk包名与路径
- adb logcat打印日志
AndroidDriver初始化
前提:maven依赖
//1,创建配置对象
DesiredCapabilities des=new DesiredCapabilities();
//2,添加配置
des.setCapability("deviceName","127.0.0.1:62001");
des.setCapability("platformName","Android");
des.setCapability("appPackage","com.baidu.BaiduMap");
des.setCapability("automationName","uiautomator2");
des.setCapability("appActivity","com.baidu.baidumaps.WelcomeScreen");
des.setCapability("noReset",true);//清除数据
//创建驱动
androidDriver=new AndroidDriver<WebElement>(new URL("http://127.0.0.1:4723/wd/hub"),des);
元素定位于于操作
androidDriver.findElement(By.id("com.handsgo.jiakao.android:id/btn_agree")).click();
//1,找到定位城市文本 点击
androidDriver.findElementById("com.handsgo.jiakao.android:id/cityTv").click();
//2,找到城市搜索框并且输入
androidDriver.findElementById("com.handsgo.jiakao.android:id/edt_search_q").sendKeys("长");
//3,点击搜索结果
androidDriver.findElementById("com.handsgo.jiakao.android:id/item_title").click();
//根据文本text值
//androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"长沙\")").click();
//根据xpath
//androidDriver.findElementByXPath("\\android.widget.TextView[@text='长沙']").click();
//4,选择性别
androidDriver.findElementById("com.handsgo.jiakao.android:id/maleTv").click();
//选择是否已报驾校
androidDriver.findElementById("com.handsgo.jiakao.android:id/registeredTv").click();
//5,选择小车
androidDriver.findElementById("com.handsgo.jiakao.android:id/itemCar").click();
//6,点击下一步
androidDriver.findElementById("com.handsgo.jiakao.android:id/okBtn").click();
//7,选择驾校
androidDriver.findElementById("com.handsgo.jiakao.android:id/school_text").click();
androidDriver.findElementById("com.handsgo.jiakao.android:id/stage_4000_6000").click();
以上为驾考宝典不用方式的元素定位操作,by id xpath 。
String expect=".main.activity.MainActivity";
String actual=androidDriver.currentActivity();
Assert.assertEquals(actual,expect);
利用TestNG断言进行判断
滑动刷新操作
//滑动刷新
TouchAction touchaction=new TouchAction(androidDriver);
//初始点坐标换成pointOption类型
PointOption startpoint=PointOption.point(356,594);
PointOption endpoint=PointOption.point(356,794);
//把原始时间转化成duration
//把duration转化成waitoption
Duration duration = Duration.ofMillis(800);
WaitOptions wait=WaitOptions.waitOptions(duration);
touchaction.press(startpoint).waitAction(wait).moveTo(endpoint);
touchaction.perform();
模拟九宫格解锁
//九宫格解锁qq
//212 577,358 577,503 577
//358 722
//212 871,358 871,503 871
Thread.sleep(10000);
TouchAction touchaction=new TouchAction(androidDriver);
Duration duration = Duration.ofMillis(800);
WaitOptions wait=WaitOptions.waitOptions(duration);
PointOption point1=PointOption.point(212,577);
PointOption point2=PointOption.point(358,577);
PointOption point3=PointOption.point(503,577);
PointOption point4=PointOption.point(358,722);
PointOption point5=PointOption.point(212,871);
PointOption point6=PointOption.point(358,871);
PointOption point7=PointOption.point(503,871);
touchaction.press(point1).moveTo(point2).moveTo(point3).moveTo(point4)
.moveTo(point5).moveTo(point6).moveTo(point7).release();
touchaction.perform();
多点触控
//实例化
MultiTouchAction multiTouchAction=new MultiTouchAction(androidDriver);
TouchAction touchAction1=new TouchAction(androidDriver);
TouchAction touchAction2=new TouchAction(androidDriver);
//获取窗口高度
int x=androidDriver.manage().window().getSize().getWidth();
int y=androidDriver.manage().window().getSize().getWidth();
System.out.println(x);
System.out.println(y);
touchAction1.press(PointOption.point(x*4/10,y*4/10))
.waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)))
.moveTo(PointOption.point(x*2/10,y*2/10))
.release();
touchAction2.press(PointOption.point(x*6/10,y*6/10))
.waitAction(WaitOptions.waitOptions(Duration.ofMillis(1000)))
.moveTo(PointOption.point(x*8/10,y*8/10))
.release();
multiTouchAction.add(touchAction1).add(touchAction2);
multiTouchAction.perform();
Appium常用Api
startActivity
//页面内跳转
Activity activity=new Activity("com.handsgo.jiakao.android","cn.mucang.android.account.activity.LoginMultiDefaultSmsActivity");
androidDriver.startActivity(activity);
//跳转到其他App
//同上
getPageSource
//当前页面代码
String pagesource= androidDriver.getPageSource();
currentActivity
//获取当前入口名
androidDriver.currentActivity();
resetApp
//重置app数据
androidDriver.resetApp();
isAppInstalled
//app是否安装
androidDriver.isAppInstalled("包名");
pressKey
Android平台独有,向系统发送一个键值,每个键值对应不同功能
KeyEvent keyEvent=new KeyEvent();
keyEvent.withKey(AndroidKey.VOLUME_UP);
androidDriver.pressKey(keyEvent);
getScreenshotAs
//获取屏幕截图并保存
File fIle=androidDriver.getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(fIle,new File("D:\\tmp\\tmt.jpg"));
getDeviceTime
//获取设备时间
System.out.println("当前时间为:"+androidDriver.getDeviceTime());
getDisplayDensity
//获取设备DPI
System.out.println("当前屏幕DPI:"+androidDriver.getDisplayDensity());
getAutomationName
//获取当前自动化引擎
System.out.println("当前引擎为:"+androidDriver.getAutomationName());
getOrientation
//获取设备横竖屏状态
System.out.println("当前横竖屏状态:"+androidDriver.getOrientation());
Toast元素获取
Toast元素,例如登录失败时所弹出的短暂提示信息。
//获取toast信息
WebElement toastElement=androidDriver.findElementByXPath("//*[contains(@text,'该用户名与密码')]");
System.out.println(toastElement.getText());
Hybrid自动化测试
准备:
安卓模拟器
UC开发者工具
打开WebView调试模式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34415.html