Appium帮助档案

Appium帮助档案Appium组件AppiumServerAppium的核心,实质上是一个web接口服务器,使用node.js实现AppiumGUIAppiumDesktop的前身,已停止维护AppiumDecktop内嵌Appiumserver,提供了GUI界面,还有许多工具整合(AppiumInspector)AppiumClientAppium向客户端发起请求,支持多种语言AppiumDecktop配置基本配置介绍simple(简单模式)advanced(高级

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
        -启动完成
        在这里插入图片描述
  • 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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注