sudo apt install openjdk-8-jdk
java -version
sudo apt update
sudo apt install android-sdk
sudo apt install android-tools-adb
安装好后,sdk位置为/usr/lib/android-sdk/
设置环境变量
vi .bashrc
source .bashrc
export ANDROID_HOME=/usr/lib/android-sdk
export PATH=$PATH:$ANDROID_HOME/tools
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/jre
export PATH=$PATH:$JAVA_HOME/bin
生效:
source .bashrc
安装nvm
cd ~/
git clone https://github.com/nvm-sh/nvm.git .nvm
. ./nvm.sh
vi .bashrc
添加:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
否则下次进入无法找到命令appium nvm node.
切换国内源:
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
安装node, npm
nvm install --lts
node -v
npm -v
npm 切换阿里源
npm config set registry https://registry.npm.taobao.org
安装appium
npm intall -g appium
启动:
appium &
安装python
apt-get install python3
apt-get install python3-pip
安装python客户端
pip install appium-python-client
(安装python库)
py脚本
#!/usr/bin/env python3
# encoding: utf-8
from appium import webdriver
import time
desired_caps={
'platformName':'Android',
'deviceName':'HXJNW18223012xxxx', #填写自己的deviceName
'platformVersion': '8.0.0',
'appPackage': 'com.tencent.mm',
'appActivity':'.ui.LauncherUI',
'noReset': True
}
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
time.sleep(10)
driver.quit()
注意deviceName platformVersion要填写正确
注意脚本里面的noReset true,如果没有这个,微信聊天记录会被清空!!!!其他应用也是吧
windows 安装
http://www.haovps.com.cn/article/187648.html
错误调试:
appium 启动的一个错误Unable to find an active device or emulator with OS 10. The following are available: RFCNA082NWX (11)
系统版本错误,platformVersion
urllib3 (1.26.9) or chardet (3.0.4) doesn’t match a supported version
解决方法:
pip3 install --upgrade requests
inspect 中如果出现:/session
解决方法:新版inspector中的Remote Path我看了一下默认值是“/”,之前版本都默认好了的,把这个改为“/wd/hub“就行了
1 获取栈顶 Activity
打开目标应用,使用 adb 查找当前界面所属 activity 及对应的 app 包名
方法一:
adb shell dumpsys window | findstr mCurrentFocus
方法二:
adb shell dumpsys activity | findstr mFocusedActivity
如何获取一个APP的包名
1.adb shell pm list package -f
1.dump package 包名
使用命令:adb shell
dumpsys package com.saj.esolar 回车之后找到包含“category.LAUNCHER” 字样的Activity即可
2.使用Monkey命令 monkey -p com.saj.esolar -vvv 1 可以设置日志的详细程度,当我们指定为 -VVV 的时候,并且指定模拟随机事件为一次,即可查看:
启动多个server
appium 多设备
Appium在分布式同时执行多设备时,是必须一个appium服务端对应一台设备,并且根据app类型的不同,启动服务端所带的参数也不同,以下是对各种类型应用的服务端对应启动命令详解:
-p :表示appium服务端和测试脚本之间通信的端口
-bp:表示appium服务端和手机上的bootstrap服务通信的端口
–chromedriver-port:表示启动的chromedriver的端口
- 原生app
appium -p 4490 -bp 2345 第一台设备对应的服务端启动命令
appium -p 4491 -bp 2346 第二台设备对应的服务端启动命令
- 混合app
appium -p 4490 -bp 2345 --chromedriver 8201 第一台设备对应的服务端启动命令
appium -p 4491 -bp 2346 --chromedriver 8202 第二台设备对应的服务端启动命令
- 纯H5 app
appium -p 4490 --chromedriver-port 8001 第一台设备对应的服务端启动命令
appium -p 4491 --chromedriver-port 8002 第二台设备对应的服务端启动命令
- 使用uiautomator2模式时,需要指定服务端和手机上uiautomator2服务通信的端口,但是该端口目前在启动appium时无法指定,需要在脚本中的driver初始化参数里进行指定,如:
DesiredCapabilities caps = new DesiredCapabilities();
caps.setCapability(AndroidMobileCapabilityType.SYSTEM_PORT, 8201);
python 样例:
https://blog.csdn.net/u013314786/article/details/83216390?
php 样例
https://applitools.com/tutorials/appium-native-php.html#install-the-sdk
中文文档:
http://appium.io/docs/cn/writing-running-appium/caps/
键盘:https://blog.csdn.net/linmumum/article/details/89487080
python+appium,回车,手机键盘等调用
from appium import webdriver
import time
desired_caps={
'platformName':'Android',
'deviceName':'192.168.132.8', #填写自己的deviceName
'platformVersion': '11',
'appPackage': 'com.android.browser',
'appActivity':'com.android.browser.BrowserActivity',
'noReset' : True
}
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
#time.sleep(15)
#driver.find_element('com.android.permissioncontroller:id/content_container').click()
#time.sleep(5)
#driver.find_element('com.android.permissioncontroller:id/content_container').click()
#time.sleep(5)
#driver.find_element_by_id('com.android.permissioncontroller:id/content_container').click()
driver.find_element(by='id',value='com.android.browser:id/url').click()
time.sleep(5)
print('在搜索框输入')
driver.find_element(by='id',value='com.android.browser:id/url').send_keys('www.baidu.com\n')
time.sleep(2)
driver.press_keycode(66)
time.sleep(10)
driver.quit()
其他资源:
控制设备:
About
Control and manage Android devices from your browser.
https://github.com/kin9-0rz/apkutils
Genymobile
scrcpy
Display and control your Android device
https://github.com/Genymobile/scrcpy
多屏投屏:
https://www.jianshu.com/p/32e7254f1fdb
JAVA案例
https://blog.csdn.net/yqw7410/article/details/88043193
https://www.jianshu.com/p/a3ba6835cebd
APP自动化测试神器之Appium-QQ登录脚本实战(java版)
https://zhuanlan.zhihu.com/p/144670335
https://zhuanlan.zhihu.com/p/136289385
Appium-元素定位(Java篇)
https://www.cnblogs.com/bugoobird/p/13797814.html