Appium基础学习之 | Appium执行简单示例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ouyanggengcheng/article/details/85165553

一、运行前准备

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 deveces得到的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

猜你喜欢

转载自blog.csdn.net/ouyanggengcheng/article/details/85165553