appium+nodejs自动化测试安卓手机

   本文主要介绍node+appium+android实现自动化测试。因为大部分网上搜索到的资料都是通过python+appium进行测试的,所以自己总结一下node的

目录

一、基础知识

1、appium环境相关

2、appium启动

3、adb server

4、adb命令

 二、相关文档集合

1、appium的能力集合

2、wb包的方法集合(如何操作手机的方法集合)

3、appium的原理介绍

三、简单的例子

 四、常见错误


一、基础知识

1、appium环境相关

1)、node (appium's runtime environment)

2)、appium (` npm install -g appium`), 本地调试也可以下载appium桌面版本

3)、android sdk ("adb" and "ANDROID_HOME" , "ANDROID_SDK_ROOT" environment variable are needed)

4)、jdk ("JAVA_HOME" env should be set)

以上环境是运行appium必须要配置的,因为appium是一个node服务,所以本地必须有node.js的环境。当然我们可以直接使用appium-doctor来检查自己的appium环境是否配置好。

2、appium启动

   appium可以通过桌面版本启动,也可以直接通过appium命令启动。当然如果用命令启动的话上面的步骤二 是一定要安装的。

appium的默认端口是4723。如果启动多测试多台手机建议启动过个appium服务。

命令启动:

appium --address 0.0.0.0 --port 4723 --bootstrap-port 4726

appium -a 127.0.0.1 -p 4727 -bp 4728

注意:  -bp 是连接Android设备bootstrap的端口号,默认是4724(也可写成--bootstrap-port)需要注意的是如果启动多个appium服务的话,-bp是必须指定的。

3、adb server

adb默认server的端口是5037,如果我们想一个adb server操作一台手机的话,可以通过下面的命令再启动adb server

adb -P 5038 start-server

adb -P 5038 kill-server

4、adb命令

  因为我们的大部分的服务都是部署在linux系统上的,当然连接上手机后我们也可以直接使用adb命令操作手机。

adb -P 5037 -s 10.211.217.7:15081 shell am force-stop 包名

:-P 指的是adb server的端口号 -s 指的是通过adb devices查看到的要操作的设备名字。

获取屏幕节点的方法,如果你的uiautomatorviewer 不好使的话

adb shell uiautomator dump /sdcard/sc.uix

adb pull /sdcard/sc.uix

然后把.uix改成.xml文件结尾就可以查看了

 二、相关文档集合

1、appium的能力集合

appium 能力集 : (这个能力集合里面的参数,在我们启动app的时候会用到)

https://appium.io/docs/en/writing-running-appium/caps/

2、wb包的方法集合(如何操作手机的方法集合)

wb 包的方法合集:

https://github.com/admc/wd/blob/master/lib/commands.js#L1780

3、appium的原理介绍

    下面的文章会介绍session相关的内容,我们的每次appium操作都是有对应的session的,session过期后对应启动的app也会退出的。

https://www.jianshu.com/p/30b3b2d6b901

三、简单的例子

const wd = require("wd");

const serverConfig = {

​ host: "localhost",
​ port: 4723,

​ };



//获取到wd的driver

const driver = wd.promiseChainRemote(serverConfig);


let desired: any = {

​ platformName: "Android",
 deviceName: "设备的名字,adb devices",
 //platformVersion: '2.0.0',
 appPackage: config.appPackage,
 noReset: true,
 resetKeyboard: true,
 appActivity: config.appActivity,
 newCommandTimeout: 120,
 //adbPort, 如果使用的adb的server不是5037端口就需要指定了
​ udid: "设备的名字,adb devices" //操作多台手机使用, 这个必须有的

​ };



//获取元素并点击

let access: any = await catchEX(driver.elementByAndroidUIAutomator(`text("同意")`));


​ if (access && JSON.stringify(access) != "{}") {

​ await access.click();

​ await sleep(3000);


​ }


driver.quit();

注意:我们通过wb获取到的driver,在查找界面元素的时候,如果没有查找的话,会报错的,我们需要catch住这个promise的报错。

 四、常见错误

1、Android bootstrap socket crashed: Error: This socket has been ended by the other party

这个可能因为我们操作了多台手机,而启用了一个appium服务。导致一些连接被占用或出现问题。这时候建议使用一个手机使用一个appium服务

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值