一、运行前准备
1.启动Appium Server
在前面文件已经说过AppiumForWindow版本的下载、安装、启动;在运行代码前,先启动Appium服务(使用Appium桌面应用或许CMD命令行启动个人选择),并把日志保存在本地路径下方便后续排查。
2.准备环境需要的jar包
Appium需要的2个Jar包,分别是java-client.jar、selenium-server-standalone.jar,版本根据情况选择,本文使用了最新的版本,下面都有列出:
(1)android的jar包全部版本下载地址:下载版本6.1.0
https://search.maven.org/search?q=g:io.appium%20AND%20a:java-client&core=gav
(2)selenium-server-standalone的jar下载地址:下载版本3.12.0
http://selenium-release.storage.googleapis.com/index.html
(3)网盘地址
https://pan.baidu.com/s/1YK3KEx7BBeWmFzgXhPJ--Q
3.准备一台Android设备并adb连接正常
本次使用了USB连接真机设备
4.准备app
app可以根据个人喜欢随便准备,应用商店或者下载都可以,下面是我自己写的一个简单App供自己测试用
百度网盘:https://pan.baidu.com/s/1guDNnFs_VPbtej-XfrLV1w
二、Eclipse上代码
1.Eclipse创建项目并引入jar包
在Appium环境搭建中的IDE集成包中已经包含了Eclipse工具,所以不需要再额外安装,打开后设置项目的工作空间,开始创建项目
选择普通Java Project项目即可,Android Application Project是作为Android项目开发创建,会自动引入Android的很多相关jar插件,所以千万注意。选择Java Project项目后,弹出对话框输入项目名,点击【Finish】完成创建。
创建完项目需要把上面下载的2个jar引入到项目中,选中创建的项目,点击鼠标右键,选择Build Path-->Configure Build Path…,弹出如下图对话框。选择右边功能按钮【Add External JARS…】添加jar包,选择下载好的2个包点击OK按钮引入。
然后在项目下面建一个文件夹,把测试apk放入文件夹内。
2.代码示例
新建Package,然后新建Class类;编写代码如下
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");
//初始化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();
}
}
}
3.运行代码
代码运行后,会在设备端安装Setting、Unlock、测试Apk三个应用,然后启动Apk并点击“安卓”tab页,然后结束。Appium服务的日志会打印出所有操作的过程,下一篇博文将会根据Appium服务的日志来分析一下Appium的生命周期。
4.遇到的问题
问题一: Adb connection Error:远程主机强迫关闭了一个现有的连接。
Connection attempts: 1
解决方法:原因是DDMS 调用 adb 引发的。经过一番搜索,发现这是 Windows 环境
下,adb 的一个限制,也可以说是 bug。当手机上同时运行的进程数大于 64 时, 就会
引发 adb 奔溃。更深层次的原因,就是 Windows API 的 WaitForMultipleObjects 所支
持的最大句柄数是 MAXIMUM_WAIT_OBJECTS,即 64。需要换一个支持进程数更大
的adb,百度网盘下载地址:https://pan.baidu.com/s/1uBXl8h4VTFho3fyUlnai_Q,下
载后替换\sdk\platform-tools的三个文件重启appium即可。
问题二:(Original error: Remote install failed: Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user])
解决方法:问题是安装被用户取消,使用adb连接手机,手机需要在开发者选项中打开允许USB安装(具体手机可以百度怎么打开这个选项)
问题三:Original error: Could not extract PIDs from ps output. PIDS: [], Procs: ["ps: uiautomator"]
解决办法:因为appium服务用的是1.4.x版本,使用的是 uiatumator1.0在android7.0得不到支持,所以获取PIDS得到空。找到Appium安装目录下node_modules\appium\node_modules\appium-adb\lib\adb.js文件,修改在var outlines = stdout.split("\n");这行代码下方增加outlines.shift();,注意有分号,然后重启appium即可。
问题四:A new session could not be created. (Original error: Command failed: C:\Windows\system32\cmd.exe /s /c "E:\Rocheng\ADT-bundle\sdk\platform-tools\adb.exe -s 5b30ee87 shell "ps 'uiautomator'""
) (WARNING: The server did not provide any stacktrace information)
解决方法请参考博文:https://blog.csdn.net/pjl6523853/article/details/72886048