appium(三)appium-desktop的使用

  appium-desktop的作用:方便调试和查找页面元素

1、首先启动mumu模拟器,然后使用adb 连接到模拟器

2、启动appium-desktop,先看看需要设置些什么东西

  (1)simple界面

  Host:Android设备的ip,若使用模拟器,使用默认的 0.0.0.0即可

  Port:端口使用默认的4723即可

如果是真机,Host 和 Port 不用填

  Edit Configurations:设置 ANDRODI_HOME 和 JAVA_HOME,如果已经配置了这两个环境变量,这appium会自动读取,建议先提前配置两个环境变量

   (2)Advanced界面

  Logfile Path:设置appium的log路径

  Log Level:设置log的等级,默认debug即可

  Local Timezone:时区设置,可看情况勾选

  Log Timestamps:日志显示时间戳

  Supress Log Color:设置日志颜色,方便读

设置好了后即可连接Android设备,start server(启动服务),start inspector session(打开调试界面)

3、设置 desired capabilities

  常用的设置如下

{
"platformName": "Android",  //设备类型 Android 或 ios
"platformVersion": "6.0.1",  // Android 或 ios 版本
"deviceName": "127.0.0.1:7555",  //设备名称,模拟器即为 ip,手机可使用 adb连接时的设备名称,使用 adb devices可查看
"appPackage": "com.baidu.tieba",  //appPackage,下面会介绍获取方法
"appActivity": ".tblauncher.MainTabActivity",  //appActivity,下面会介绍获取方法
"noReset": true,  //不清除缓存
//unicodeKeyboard 和 resetKeyboard 设置Unicode键盘,让脚本能够输入中文,成对使用,单独使用会被ignore
"unicodeKeyboard":true,  
"resetKeyboard":true
}
连接设备必须的属性 :platformName,platformVersion,deviceName,appPackage,appActivity

获取 appPackage 和 appActivity 的方法:首先启动对应的App,然后输入命令 adb shell dumpsys activity |findStr "mFoc"

 前面的即为 appPackage ,后面的为 appActivity ,注意千万别把 . 漏掉了

4、启动 APP

  (1)启动APP失败

  1.出现下图的错误时,不要使用 Automatic Server,使用 Custom Server 启动

 

  2.有可能会有模拟器的adb和Android studio的adb版本不同而导致链接不上的情况,保证mumu模拟器ADB版本号与SDK的abd版本一致,将SDK的abd复制到mumu模拟器路径下并修改文件名,替换原有文件

  (2)启动后的界面可以 查找元素,按坐标滑动,按坐标点击,录制脚本 等功能,录制脚本时会自动生成 代码脚本,可选择 Java,Python等,写脚本时可以用来参考

5、元素定位 

  1. app的xml结构中的 attribute中的 content-desc 对应于元素定位时用到 accessibility id,定位使用 driver.findElement(MobileBy.AccessibilityId("请输入QQ号码或手机或邮箱"))

  2. app的xml结构中的 attribute中的 resource-id 对应于元素定位时用到的 id,定位使用 driver.findElement(By.id("com.tencent.mobileqq:id/login"))

  3. 依然可以使用xpath 的属性定位,写法和selenium的xpath的属性定位相同

6、Java代码

  需要先拉去jar 包:selenium,Java-client

  注意,使用 代码启动APP时,启动appium-desktop的服务即可(start server),不要打开调试界面(start inspector session),防止冲突

    //使用appium-desktop启动APP
    @Test
    public void appConnect() throws InterruptedException, MalformedURLException {
        //配置Capabilities参数
        DesiredCapabilities desiredCapabilities = new DesiredCapabilities();
        //设置必须的参数
        desiredCapabilities.setCapability("deviceName", "127.0.0.1:7555");
        desiredCapabilities.setCapability("platformName", "Android");
        desiredCapabilities.setCapability("platformVersion", "6.0.1");
        desiredCapabilities.setCapability("appPackage", "com.tencent.mobileqq");
        desiredCapabilities.setCapability("appActivity", ".activity.LoginActivity");
        //以下为可选参数
        //不要重置签名
        desiredCapabilities.setCapability("noSign", true);
        //不清除缓存
        desiredCapabilities.setCapability("noReset", true);
        //设置使用unicode键盘,让自动化脚本实现过程中能够输入中文,成对使用,单独使用下面的某一个属性会ignore
        desiredCapabilities.setCapability("unicodeKeyboard", true);
        desiredCapabilities.setCapability("resetKeyboard", true);
        //电脑连接了多个设备时,需要指定设备
        //desiredCapabilities.setCapability("udid","127.0.0.1:7555");

        //创建driver对象,URL参数是固定写法,可参考appium-desktop的custom server的Remote Host,Remote Por,Remote Path
        AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities);
        //启动APP需要一定的时间,注意设置等待时间
        Thread.sleep(3000);
        //使用上面提到过的三种元素定位方式
        driver.findElement(MobileBy.AccessibilityId("请输入QQ号码或手机或邮箱")).sendKeys("123456");
        driver.findElement(By.xpath("//android.widget.EditText[@content-desc='密码 安全']")).sendKeys("12456");
        driver.findElement(By.id("com.tencent.mobileqq:id/login")).click();

        Thread.sleep(10000);
        //关闭APP和driver
        driver.closeApp();
        driver.quit();
    }
posted @ 2020-01-03 23:07  hjy1995  阅读(2007)  评论(0编辑  收藏  举报