上一节我们学习了如何使用模拟器写自动化测试程序,如果你已经开始做了实验,我相信你会骂娘的,不然你就是个忍耐能力超强的程序员,我对阁下的佩服犹如滔滔江水,连绵不绝,又如黄河泛滥,一发不可收拾......
下面我们就开始使用真机吧,对了说机不带吧,文明你我他。
和使用模拟器做测试的前提条件一样,我再重新说一遍下面的废话。
安装 Python 解释器:Python 2 和 Python 3 都可以。点击安装 python 2 解释器或者点击安装 python 3 解释器。我们教程中使用 Python 3。
为了方便写程序,我们可以使用强大的 Python IDE(当然你也可以使用记事本),在此,我推荐使用 Pycharm,点击 Pycharm 安装和使用方法。
安装 python-client,其实,python-client 的项目名称叫:Appium-Python-Client,我们可以使用 Python 自带的 pip 包管理工具进行安装,命令为: pip install Appium-Python-Client
。
第一步:准备一台安卓手机(三星,华为,小米...都可以),因为我是个穷逼,我准备了一个老三星手机,可传输数据线一条(注意:如果打开了 USB 调试连接电脑没有反应只是显示充电,那这条数据线极可能是不能传输数据的,请更换数据线)。
第二步:打开 USB 调试,打开方法为:主菜单界面点击【应用程序】——在应用程序界面点击【设定】——在设定界面点击【关于手机】——在关于手机界面点击【版本号】,连续点击 7 次【版本号】直到出现提示【开发者模式已启用】。返回【设定】后——向下寻找是否有【开发者选项】,如果没有则返回继续猛戳【版本号】——如果有则点击【开发者选项】——进入【开发者选项】——打开【USB调试】,即可连接电脑上的第三方助手自动下载驱动连接了。
第三步:在【设定】——【一般】——【关于设备】中找到并记下“Android版本”的版本号,如下图。
第四步:获取手机的设备信息,打开命令提示符,输入:adb devices 命令查看连接的手机设备名称(确保配置好环境变量--配置环境变量请参考 设置 Android 环境变量,否则找不到 adb),记下该手机设备名称(注意:如果找不到设备,请安装好对应的手机驱动,如果你找不到对应手机的驱动,可以用 360 手机助手,会自动安装对应手机的驱动)。
第五步:打开计算器(我们以操作真机上的计算器为例),然后打开命令提示符,定位到 adb 所在的目录路径,输入命令:adb shell 回车,再输入:dumpsys window | grep "mCurrentFocus"。记下 计算器的包名(com.sec.android.app.popupcalculator) 和计算器的主 activity(com.sec.android.app.popupcalculator.Calculator)。
第六步:打开 appium,点击左上角安卓图标,在弹出框中找到 Capabilities 菜单,找到 Platform Name 选项选中 Android,找到 Automation Name 选项选中 Appium,找到 PlatformVersion 选项选中选中你真机的版本(如果没有符合你真机版本的选项,选择任何版本都可以,这个并无要求),找到 Device Name 选项输入你真机的设备名称(其实也可以不设置)。
第七步:点击左上角齿轮图标,在弹出框中找到 Server 菜单,我们发现 Server Address 项默认为:127.0.0.1(如果你自动化程序和 appium 不在一个电脑上,请设置 appium 所在电脑的 ip 地址),Port 项默认为:4723(建议使用该默认设置),在此,我们使用的 ip 和 port 全部使用默认设置,如下图。
第八步:点击右上角 三角 按钮,启动 appium,我们看下 Appium 的启动日志,发现 Appium 在启动时使用我们设置的默认值,即本机的 4723 端口,也就是:127.0.0.1:4723。
> Launching Appium server with command: D:\Program Files (x86)\Appium\node.exe lib\server\main.js --address 127.0.0.1 --port 4723 --platform-name Android --platform-version 18 --automation-name Appium --device-name "7abf5bbc" --log-no-color > info: Welcome to Appium v1.4.16 (REV ae6877eff263066b26328d457bd285c0cc62430d) > info: Appium REST http interface listener started on 127.0.0.1:4723 > info: [debug] Non-default server args: {"address":"127.0.0.1","logNoColors":true,"deviceName":"7abf5bbc","platformName":"Android","platformVersion":"18","automationName":"Appium"} > info: Console LogLevel: debug
第九步:编写 appnium 测试脚本。
from appium import webdriver desired_caps = {} desired_caps['platformName'] = 'Android' # 安卓系统 desired_caps['platformVersion'] = '4.3' # 连接的设备(在此是我的三星手机)的操作系统是 4.3 版本 desired_caps['deviceName'] = '7abf5bbc' # 我的三星手机的名称 desired_caps['appPackage'] = ' com.sec.android.app.popupcalculator' # 计算器 app 的包名 desired_caps['appActivity'] = '.Calculator' # 计算器 app 的主 activity(计算器启动的第一个页面) driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 连通过 ip 和端口 连接模拟器 driver.find_element_by_name("1").click() driver.find_element_by_name("5").click() driver.find_element_by_name("9").click() driver.find_element_by_name("回退").click() driver.find_element_by_name("9").click() driver.find_element_by_name("5").click() driver.find_element_by_name("加").click() driver.find_element_by_name("6").click() driver.find_element_by_name("等于").click() driver.quit()
运行上面的代码和模拟器的代码除了 desired_caps 中的参数不同,还有计算器中的运算符号的 name 不同,那我们是如何知道控件的名称呢,稍安勿躁,后面我们会学习如何查看控件的属性。好了,现在你将会看到我的三星的老手机的运行界面:
博主很用心啊,直接在真机上做教程