本来还想继续写一篇UiAutomator2.0新增几个API的介绍,但是已经迫不及待回到Appium的轨道中来了,了解UiAutomator2.0与Instrumentation、Accessibility对于学习android自动化帮助都是特别大的,有机会还是想继续往下研究的。从这篇文章开始就正式回到Appium的使用中来了。
一、Appium-Desktop下载
Appium-Desktop在之前文章大概介绍过,这里就不多说了
下载地址:https://github.com/appium/appium-desktop/releases/(window系统选择
appium-desktop-setup-version.exe下载)
二、Appium-Desktop使用
文中使用的Apk下载地址:https://pan.baidu.com/s/16L3b4WFif50AaGFE-elufQ
1.启动Appium Server
使用的是V1.10.0版本,当前最新版本是V1.11.0,不太喜欢用最新版本,用了次高版本;点击Start Server运行Appium Server
2.测试代码
对于使用Appium来说,从Appium1.4.16版本切换成使用Appium-Desktop,客户端(代码)的维护成本是不高的,几乎不需要怎么改动,下面使用的代码与《Appium基础学习之 | Appium执行简单示例》文中一致,只是针对于Appium-Desktop的一些使用规则作了一点点变动。(已经回到Eclipse中,使用Appium框架代码用普通java项目即可)
public class Demo {
public static void main(String[] args) throws MalformedURLException {
try{
//设置apk的路径
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "apps");
File app = new File(appDir, "ymxh_1.0.apk");
//设置自动化相关参数
DesiredCapabilities capabilities = new DesiredCapabilities();
//设备别名
capabilities.setCapability("deviceName", "vivo x7");
//如设备已经安装了,设置true不重复安装
capabilities.setCapability("noReset", true);
//udid值就是,使用adb devices得到的SN码
capabilities.setCapability("udid", "5b30ee87");
//设置apk路径
System.out.println(app.getAbsolutePath());
capabilities.setCapability("app", app.getAbsolutePath());
//支持中文输入,必须两条配置
capabilities.setCapability("unicodeKeyboard", True);
capabilities.setCapability("resetKeyboard", True);
capabilities.setCapability("automationName", "uiautomator2");
//初始化Driver,http://127.0.0.1:4723/wd/hub是Appium服务的地址
AndroidDriver driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
//使用id定位
WebElement element = driver.findElement(By.id("com.main:id/android_tab"));
element.click();
driver.quit();
}catch(Exception e){
e.printStackTrace();
}
}
}
变动的是在Appium1.4.16版本之前,使用DesiredCapabilities设置的参数中,布尔值boolean的value使用的是字符串类型,而到了Appium-Desktop版本后直接填写布尔值。最重要的一个参数automationName,Value的值为uiautomator2,这决定使用uiautomator2.0;从这里可以大概猜一下,Appium-Desktop依然兼容UiAutomator1.0的使用。
3.执行测试
准备运行设备,上面代码中填写的5b30ee87为设备SN码,使用的是真机,当然也可以用模拟器。链接的设备只有一台的时候在代码中可以不指定。
运行代码后,在设备上会安装io.appium.uiautomator2.server、io.appium.uiautomator2.server.test、Setting三个APK之后,才会提示安装测试应用的APK,然后执行点击操作完成测试。
(1)首先看看io.appium.uiautomator2.server、io.appium.uiautomator2.server.test
这两个Apk的安装与Instrumentation运行测试是一样的,会推送被测应用、测试应用到设备端并执行。而Appium-Desktopt这里就与Appium1.4.16版本之前推送Bootstrap到设备不同。这是Appium-Desktop改动的一点,它全面拥抱UiAutomator2.0后,也是依靠Instrumentation来运行测试,而Appium-Desktop很巧妙的借助了这点,用来在设备端启动Appium Server的服务端(相对于设备端来说,Window上的Appium-Desktop服务是客户端),剩下的在说到Appium-Desktop的运行过程日志分析再继续说
(2)安装Setting
在Appium1.4.16版本之前的测试中,会安装unlock.app、setting.app、io.appium.android.ime三个应用,而到了Appium-Desktop后只需要安装Setting
上面二点是在使用Appium-Desktop测试执行最开始发现的不同,接下来就是分析运行日志,来看看Appium-Desktop的运行过程中发生了一些什么事情?另开博文分析。