appium主要是通过调用安卓提供的接口来执行命令的,所以需要安装java和安卓sdk。
1.安装appium服务端
appium的服务端是基于node的,直接使用npm(node包管理器)安装即可,比较简单。
npm install -g appium
2.安装python客户端
pip install appium-python-client
同样直接使用pip安装即可。
3.安装java环境
brew tap adoptopenjdk/openjdk
brew install adoptopenjdk8
配置环境变量
java_home=/library/java/javavirtualmachines/adoptopenjdk-8.jdk/contents/home
class_path="$java_home/lib"
path=".$path:$java_home/bin"
export path=/usr/local/bin:$path
4.安装安卓sdk
brew install --cask android-platform-tools
配置环境变量:
export android_home=/users/xxx/library/android/sdk
其中xxx为用户名。
完成之后,将安卓手机连接到电脑,注意手机的开发者权限之类的全部开启。
然后执行 adb devices
,可以显示设备,则安装成功。
其实通过brew安装的软件默认在命令行是可以直接打开不用配置环境变量的,因为brew设置了软链接,但是appium的服务无法读取到,所以上面还是需要配置一下。
5.连接测试
根据上面的配置之后,环境基本安装完毕,下面来测试一下,首先启动appium服务端。
命令行执行:appium,出现欢迎界面则没有问题。
主要是测试一下 appium inspector,这个是appium提供的查看手机app元素以及其它功能的桌面软件,可以大大提升开发效率。
下载打开这个软件,远程、端口、路径都使用默认不填即可,主要填一下右下角的 json representation:
'platformname': 'android', # 被测手机是安卓
'automationname' : 'uiautomator2',
'apppackage': 'tv.danmaku.bili', # 启动app package名称
'appactivity': '.ui.splash.splashactivity', # 启动activity名称
'unicodekeyboard': true, # 使用自带输入法,输入中文时填true
'resetkeyboard': true, # 执行完程序恢复原来输入法
'noreset': true, # 不要重置app 'newcommandtimeout': 6000,
填上最前面的platformname和automationname就可以,其它都是选配。
6.python代码测试
执行d88尊龙官网手机app官网的python示例代码:
import unittest
from appium import webdriver
from appium.options.android import uiautomator2options
from appium.webdriver.common.appiumby import appiumby
capabilities = dict(
platformname="android",
automationname="uiautomator2",
devicename="android",
apppackage="com.android.settings",
appactivity=".settings",
)
appium_server_url = "http://localhost:4723"
class testappium(unittest.testcase):
def setup(self) -> none:
self.driver = webdriver.remote(
appium_server_url,
options=uiautomator2options().load_capabilities(capabilities),
)
def teardown(self) -> none:
if self.driver:
self.driver.quit()
def test_find_battery(self) -> none:
el = self.driver.find_element(by=appiumby.xpath, value='//*[@text="电池"]')
el.click()
if __name__ == "__main__":
unittest.main()
成功则表示正常连接