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(); }