作者的配置环境和版本:
win10 + python3.6 + Appium v1.4.16
1.下载node https://nodejs.org/en/download/,
下载node.Js 验证安装: node -v
2.下载jdk
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html?utm_source=androiddevtools&utm_medium=website
配置环境变量:
JAVA_HOME jdk安装路径
CLAsspATH 变量值为:%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
path 里新建如下图:
3.下载 安装AndroID SDK http://tools.android-studio.org/index.php/sdk
SDK Manager安装API包遇到安装不了的问题:
解决: 以管理员的身份打开SDK Manager.exe
https://www.androiddevtools.cn/index.html(很好的网站,可以下很多AndroID相关的包)
配置环境变量:
新建环境变量ANDROID_HOME,变量值为sdk的路径:E:\AndroID\androID-sdk
在Path变量中增加两个路径:E:\AndroID\androID-sdk\platform-tools和E:\AndroID\androID-sdk\tools
配置了环境变量后,在命令行窗口中运行adb -version
4.安装python 下载地址:https://www.python.org/downloads/,
5.安装Appium
AppiumForwindows下载地址:https://bitbucket.org/appium/appium.app/downloads/
运行Appium需要依赖.NET Framework 4.5(一般都不需要安装,windows会自带)
也可以通过命令装appium:
先安装taobaoNPM镜像:npm install -g cnpm --registry=https://registry.npm.taobao.org
再命令安装appium :
cnpm install -g appium (安装最新版本)
cnpm install appium@version -g (安装指定版本,version是版本号)
6.安装Appium-doctor: cnmp install appium-doctor -g
appium-doctor可以检测appium整体依赖环境配置情况
cmd中输入appium-doctor命令,提示’appium-doctor’ 不是内部或外部命令,也不是可运行的程序
解决方法:
将Appium安装目录中的.bin添加到环境变量Path中,例如:
C:\Program files (x86)\Appium\node_modules.bin
验证:
7. 下载Appium-Python-ClIEnt https://pypi.python.org/pypi/Appium-Python-Client/
也可以用命令直接:pip install Appium-Python-ClIEnt
8.安装PyCharm
下载地址 https://www.jetbrains.com/pycharm/download/#section=windows
9. AppiumDesktop下载
下载地址https://github.com/appium/appium-desktop/releases/tag/v1.3.1
10.下载夜神模拟器,自行百度。。。。。。。。。。。。。。。
11.连接模拟器(夜神模拟器) 连接时先打开模拟器的开发者usb调试开关: adb connect 127.0.0.1:62001 (默认第一个模拟器的端口是62001)adb connect 127.0.0.1:62025 (第二个是62025 ,以后依次+1) adb devices 查看当前连接的设备 查看app:adb shell pm List package取文件:adb pull 文件路径 目的路径截图: adb shell screencap 路径adb服务启动和关闭: adb kill-server /adb start-server 获取app的 activityaapt dump badging 包路径 | findstr "launchable"常用的一些adb命令及详细介绍:参照 https://www.cnblogs.com/mliangchen/p/5114149.html Appium元素定位:
工具:AndroID\androID-sdk\tools uiautomatorvIEwer.bat
1. ID定位:
self.driver.find_element_by_ID('com.tencent.mobileqq:ID/btn_login').click()
2. class定位:
self.driver.find_element_by_class_name('androID.Widget.button').click()
(注:一般一个页面上的class属性不唯一,元素不唯一的话定位会报错了)
3. 相对定位:
相对定位是先找到该元素的有对应属性的父元素节点,然后基于父元素进行元素定位。
代码举例:
此处只是举例什么是相对定位,一般有ID直接可以定位当然不这么干,在没有ID的情况下可以这么定位。。。。。。。。。。。
self.driver.find_element_by_ID('com.tencent.mobileqq:ID/name')self.driver.find_element_by_class_name('androID.Widget.button').click()
uiautomatorvIEwer截屏:
4. xpath定位:
代码举例:
name = self.driver.find_element_by_xpath('//androID.Widget.EditText[@text="QQ号/手机号/邮箱"]').send_keys('********')
name = self.driver.find_element_by_xpath('//*[@ and @index="3"]').send_keys('********')
uiautomatorvIEwer截屏:
5. List定位:
List定位首先是使用find_elements_by_ID(class_name/path)获取一组相同的class属性的的元素,然后使用数组下标来区分标记不同元素进行相关 *** 作
代码举例:
一般从相册设置头像或是选择照片时,会用到List定位,因为每一张照片的ID是相同,那就要通过下标来定位所选的照片了..............
images = self.driver.find_elements_by_ID('ID')images[5].click
6. Appium元素等待:
强制等待:设置固定的等待时间,使用sleep()方法即可实现
from time import sleep#强制等待5秒sleep(5)
隐式等待:针对全部元素设置等待时间
driver.implicitly_wait(20)
显示等待:针对某个元素来设置的等待时间,方法webdriverwait()一般和until()或until_not()方法配合使用,另外,lambda提供了一个运行时动态创建函数的方法
from selenium.webdriver.support.ui import webdriverwaitwebdriverwait(self.driver,3).until(lambda x:x.find_element_by_ID('com.tencent.mobileqq:ID/btn_login'))
7. Toast元素识别:
下图为一般的toast提示,uiautomatorvIEwer工具是无法获取到这种toast的任何信息
代码实现:
注意如果内容为中文,必须注释#Coding=utf-8,否则会因为编码导致文字识别失败
#适用toastd窗
def get_toast(self):
error_message= "账号或密码错误,请重新输入"
limit_message=""
message1 ='//*[@text=\'{}\']'.format(error_message)
#message2 = '//*[@text=\'{}\']'.format(limit_message)
toast_element = webdriverwait(self.driver,5).until(lambda x:x.find_element_by_xpath(message1))
print(toast_element.text)
8. 屏幕截图:
方法一:save_screenshot()该方法直接保存当前屏幕截图到当前脚本所在的文件位置
self.driver.save_screenshot('login.png')
方法二:get_screenshot_as_file(self,filename)将截图保存在指定文件路径
self.driver.get_screenshot_as_file('.\screenshots\login.png')
9. 连续滑动 *** 作_touchAction:
touch Action包含一系列 *** 作,比如按压,长按,点击,移动,暂停,组成一套动作。
按压:press()
touchAction(driver).press(x=0,y=308)
长按:longPress() ,比press多个按的时间参数duration,以毫秒为单位
long_press(x=0,y=308,duration=1000)
点击:tap()对一个元素或是控件执行点击 *** 作
tap(self, element=None, x=None, y=None, count=1)
移动:move_to()将指针从上一个点一道指定的元素或点
move_to(self, element=None, x=None, y=None)
暂停:Wait(),暂停脚本的执行,单位为毫秒
wait(self, ms=0)
释放:release()结束行动,取消屏幕上的指针
release(self)
执行:perform()执行的 *** 作发送到服务器的命令 *** 作
perform(self)
代码举例:已设置手势密码锁为例,先进入密码锁的设置页面:
#导入模块from appium.webdriver.common.touch_action import touchActionfor i in range(2): touchAction(driver).press(x=243,y=381).wait(2000)\ .move_to(x=455,y=390).wait(1000) \ .move_to(x=455, y=390).wait(1000) \ .move_to(x=455, y=390).wait(1000) \ .release().perform()
10. 多点触控 *** 作_MultiAction:
多点触控的类,可以模拟用户多点 *** 作,主要包含add()和perform()两个方法
代码举例:以放大缩小百度地图为例
from appium import webdriverfrom appium.webdriver.common.touch_action import touchActionfrom appium.webdriver.common.multi_action import MultiActionfrom time import sleepdesired_caps = {}desired_caps['platformname'] = 'AndroID'desired_caps['platformVersion'] = '5.1.1'desired_caps['devicename'] = '127.0.0.1:62001'desired_caps['app'] = r'C:\Users\heber\Downloads\baIDumap.apk' # 被测试的App在电脑上的位置desired_caps['appPackage'] = 'com.baIDu.BaIDuMap'desired_caps['appActivity'] = 'com.baIDu.baIDumaps.WelcomeScreen'desired_caps['noreset'] = Truedriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps) # 启动appx = driver.get_window_size()['wIDth']y = driver.get_window_size()['height']def pinch(): action1 = touchAction(driver) action2 = touchAction(driver) pinch_action = MultiAction(driver) action1.press(x=x*0.2, y=y*0.2).wait(1000).move_to(x=x*0.4, y=y*0.4).wait(1000).release() action2.press(x=x*0.8, y=y*0.8).wait(1000).move_to(x=x*0.6, y=y*0.6).wait(1000).release() pinch_action.add(action1,action2) print("start pinch....") pinch_action.perform()def zoom(): action1 = touchAction(driver) action2 = touchAction(driver) zoom_action = MultiAction(driver) action1.press(x=x*0.4, y=y*0.4).wait(1000).move_to(x=x*0.2, y=y*0.2).wait(1000).release() action2.press(x=x*0.6, y=y*0.6).wait(1000).move_to(x=x*0.8, y=y*0.8).wait(1000).release() zoom_action.add(action1,action2) print("start zoom....") zoom_action.perform()
Pycharm 创建 Project,搭建 APPTEST框架如下图:
1.框架功能
业务功能的封装 测试用例封装测试包管理截图处理断言处理日志获取测试报告生成数据驱动数据配置
2. driver封装
config文件夹创建app_config.yaml 文件,存放配置app的配置信息platformname: AndroIDplatformVersion: 5.1.1devicename: 127.0.0.1:62001#mx4真机#platformVersion: 5.1.1#udID:#devicename: MX4app: qq.apkappPackage: com.tencent.mobileqqappActivity: com.tencent.mobileqq.activity.SplashActivitynoreset: TrueunicodeKeyboard: TrueresetKeyboard: Trueip: 127.0.0.1port: 4723
3. 公共模块封装
4. Login模块封装原理
if __name__ == '__main__': for i in range(3): pinch() for i in range(3): zoom()总结
以上是内存溢出为你收集整理的Appium+Python 搭建自动化测试框架全部内容,希望文章能够帮你解决Appium+Python 搭建自动化测试框架所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)