Appium+Python之获取toast
思考:手机APP上的必填或错误文本提示一般1-2s就会消失,比较难定位,所以一般的固定元素定位方式是不可用的,那我们如何定位toast呢?
前提:1.Appium1.6.3以上(包括1.6.3)
2.下载安装node.js(官网下载即可)
3.下载安装uiautomator2及其2个配置文件(appium-uiautomator2-server-debug-androidTest.apk和appium-uiautomator2-server-v2.8.0.apk)
4.下载安装Android SDK(tools文件夹下必须要有zipalign.exe工具,否则没法启动app)
5.真机或模拟器版系统版本要求Android 5.0以上
环境准备:
一、下载安装node.js
1.进入官网下载:https://nodejs.org/en/download/, 选择适合自己操作系统的安装文件,下载node js,并安装(这里安装路径:C:\Program Files\nodejs)
以管理员权限打开cmd命令窗口
验证nodejs是否安装成功:node -v
验证npm是否安装成功:npm -v
2.改变原有路径
(1)我们要先配置npm的全局模块的存放路径以及cache缓存的路径,例如我希望将以上两个文件夹放在NodeJS的主目录下,便在NodeJs下建立"node_global"及"node_cache"两个文件夹,输入以下命令改变npm配置
npm config set prefix "C:\Program Files\nodejs\node_global" npm config set cache "C:\Program Files\nodejs\node_cache"
(2)在系统环境变量添加系统变量NODE_PATH,输入路径C:\Program Files\nodejs\node_global\node_modules,此后所安装的模块都会安装到该路径下
二、安装淘宝npm(cnpm)
1.输入以下命令安装cnpm(注:“-g”这个参数意思是装到global目录下,也就是上面说设置的“C:\Program Files\nodejs\node_global”里面)
验证cnpm是否安装成功:cnpm -v
npm install -g cnpm --registry=https://registry.npm.taobao.org
2.添加系统变量path的内容
因为cnpm会被安装到C:\Program Files\nodejs\node_global下,在系统变量path下添加该路径即可
三、安装Appium
输入以下命令安装appium(1.8.1)
cnpm install -g appium@1.8.1
验证Appium是否安装成功:Appium -v
appium安装成功后,里面可以看到uiautomator2及其2个配置文件
实际操作
一、启动Appium
appium --session-override -p 4723 -bp 4768 -U emulator-5554 -p 监听端口号 -u 模拟器名称 -bp 随意
二、运行模拟器
闪电或夜神模拟器
三、编写脚本:
Step1:初始化
在capability配置内部增加:desired_caps[‘uiautomationName’]=’ uiautomator2’
DriverConfigure.py(配置脚本)
# coding:utf-8 ''' Created on 2018-11-7 @author: 丹姐 Project:配置驱动 ''' from appium import webdriver import time # appium远程启动app # 定义获取驱动方法 def get_driver(): try: desired_caps ={} desired_caps['automationName'] = 'uiautomator2' #引入uiautomator2,用于定位toast desired_caps['platformName'] = 'Android' # 设备系统 desired_caps['platformVersion'] = '5.1.1' # 设备系统版本 desired_caps['deviceName'] = 'emulator-5554' # 设备名称 desired_caps['app'] = r'E://app-debug.apk' # 测试app desired_caps['appPackage'] = 'com.xywg.smartsitegov' # 获取包名 desired_caps['appActivity'] = 'com.xywg.smartsitegov.activity.LaunchActivity' # 获取activity启动 desired_caps['unicodeKeyboard'] = 'True'#支持unicode输入法 desired_caps['resetKeyboard'] = 'True'#重置键盘 desired_caps['noReset'] = 'true' # 模拟用户非首次启动 driver = webdriver.Remote("http://localhost:4723/wd/hub", desired_caps) time.sleep(5) # 等待5秒 return driver except Exception as e: raise e
Step2:定位Toast元素
(1)定义toast文本内容
(2)定义元素路径
(3)定义等待时间
(4)组合文本内容和路径进行定位:用format()连接路径和文本内容
BasePage.py(基类脚本)
# 重写获取toast方法 def find_toast(self, message, timeout, poll_frequency): u'''获取toast信息文本并验证''' message1 = "//*[@text=\'{}\']".format(message) element = WebDriverWait(self.driver, timeout, poll_frequency).until( EC.presence_of_element_located((By.XPATH, message1))) return element.text
Step3:页面调用获取toast方法
XXXPage.py(页面脚本)
#获取上传图片提示 photo_toast = self.find_toast(u'请上传图片', 10, 0.01) print(u'图片上传必填提示:',photo_toast)
四、运行脚本
执行测试用例