python-app自动化测试知识详解
一、App自动化测试原理
自动化脚本—发送指令—>appium server—转发指令—>Android SDK(软件工具包/框架)—操作手机终端—>被测手机终端(模拟器/真机)
二、Desired Capabilities-Appium自动化配置项
设置参数:
操作系统:plateformName 值
版本 plateformVersion
设备名称
app ???apk的路径(自动安装到终端)
包名(应用程序)
入口启动项
Desired Capabilities-Appium
三、常用的adb命令
1. 连接模拟器:adb connect 127.0.0.1:62001
其它模拟器:雷神(5555) 夜神(62001) mumu(7555) 逍遥(21503)
2. 查看连接的设备:adb devices
3. 查看被测app的包名及入口启动页面
aapt dump badging apk的路径
四、python代码实现手机终端
以考研帮app为例:
五、appium日志的查看
- 自动化脚本发送http请求,请求参数:终端设置参数
- 创建会话
- 确认终端设备是否连接 并且确认安卓版本 确认设置参数是否与终端的设置是否一致
- Appium会推送一个包’AppiumBootstrap,jar’?模拟器上api包:appium server指令进行接收,操控手机终端
- 响应http请求
- 下一个http请求...
六、appium元素定位工具
1.UIAutomatorView
Android SDK自带的定位工具
位置:D:\Andriod_SDK\tools\uiautomatorviewer.bat
Jdk:支持jdk1.8或1.8以下版本
元素常见几个属性:
text:
resoureid:
class:元素标签
content-desc/description:元素功能描述-语音播报
2.Appium Desktop Inspector
Appium server自带的定位工具
3.Weditor-----推荐
Uiautomator2 python第三方库 通过appUI自动化测试框架
安装(在dos下进行):
命令01:pip install Uiautomator2
命令02:python -m uiautomator2 init
命令03:pip install weditor==0.6.4???(可能出错,需要降低版本)
确认安装:weditor --help
使用:weditor,会在浏览器中打开weditor
七、Appium界面元素定位方法(id/ClassName/accessibility/xpath)
1. 问题
问题1:不推荐使用
版本:appium-python-client:2.11.1,selenium:4.10.0------不推荐使用
AttributeError: 'WebDriver' object has no attribute 'find_element_by_id'
解决方法:
python用appium进行安卓测试时,find_elements_by_*提示没有这个方法的解决方案_没有find_element_by-CSDN博客
注意:1、appium1.5版本后不再支持Name定位
??????2、Selenium4.0不再支持find_elements_by_*方法,只支持finf_element(by,value)和find_elements(by.value)这两种定位方法,关键在于by的值都有哪些,如下:
第一类是继承Selenium库中的by值,在selenium.webdriver.common.by文件中,可以看到by值有以下几种:
第二类是appium封装其他库的接口(比如uiautomator2),在appium.webdriver.common.appiumby文件中,可以看到by值有以下几种(在框架中使用):
3、也可以通过AppiumBy来进行定位,如下:
from appium.webdriver.common.appiumby import AppiumBy
? ? ?
4、特殊页面元素定位(contexts):
问题2:推荐使用版本
版本:Appium-Python-Client :1.2.0,selenium:3.141.0------推荐使用,JDK:1.8
版本安装推荐如下,安装Appium-Python-Client时会自动安装selenium
pip install appium-python-client==1.2.0
问题3:appium出现:UiAutomator exited unexpectedly with code 4294967295, signal null
解决方法:1.重启appium
2.卸载
3.在dos下执行python -m weditor
2.元素定位的方法:
1.通过resourceid属性定位 ?id
2.通过文本定位 ??text
3.合定位:多个属性来进行定位 ?resourceId + text
driver.find_element_by_android_uiautomator('new UiSelector().text("登录").resourceId("com.tal.kaoyan:id/login_login_btn")')
4.通过content-desc/description定位 ?accessibility
el_pass=driver.find_element_by_accessibility_id('密码 安全')
el_pass.click()
time.sleep(1)
el_pass.send_keys('1234567890')
注意:
- app输入时经常会遇到无法输入的情况,需要通过click()点击缓冲实现下一步输入
5.通过xpath定位,一般不采用
driver.find_element_by_xpath("//*[@resource-id='com.tencent.mobileqq:id/btn_login']")
3.APP元素的操作
1.APP六大常用元素操纵:
click()、send_keys()、get_attibute()、text()
get_attibute():可以输出属性值(如输入框的值、按钮值)
el_login.get_attribute('text')
1.滑屏、多点触控、长按、下拉
Swipe(self:T,start_x:int,start_y:int,end_x:int,end_y:int,duration:int=0)
参数说明:
start_x:开始位置的x坐标
start_y:开始位置的y坐标
end_x: 结束位置的x坐标
end_y: 结束位置的y坐标
duration:延时多少毫秒
1.滑动
方式1:swipe
上滑:driver.swipe(360,1000,360,100,1500)
下滑:driver.swipe(360,100,360,1000,1500)
左滑:driver.swipe(650,640,100,640,1500)
右滑:driver.swipe(100,640,650,640,1500)
例():
#获取屏幕尺寸
app_size=driver.get_window_size()
print('手机屏幕的尺寸',app_size)
x=app_size['width']
y=app_size['height']
#左滑(2次)
for i in range(0,2):
driver.swipe(start_x=x*0.9,
start_y=y*0.5,
end_x=x*0.3,
end_y=y*0.5,
duration=1000)
time.sleep(1)
#点击立即体验
el_tiyan=driver.find_element_by_id("com.tal.kaoyan:id/activity_splash_guidfinish")
el_tiyan.click()
print('输入用户名')
# el_user = driver.find_element_by_id("com.tal.kaoyan:id/login_email_edittext")
el_user=driver.find_element_by_android_uiautomator('new UiSelector().text("请输入用户名")')
el_user.send_keys("xugang")
print('输入密码')
el_passwd = driver.find_element_by_id("com.tal.kaoyan:id/login_password_edittext")
el_passwd.send_keys('xugang_123')
print("请点击登录")
el_login=driver.find_element_by_android_uiautomator('new UiSelector().text("登录").resourceId("com.tal.kaoyan:id/login_login_btn")')
el_login.click()
time.sleep(10)
driver.quit()
方式2:drag_and_drop
#将元素e1拖拽到元素e2
driver.drag_and_drop(e1,e2)
方式3:TouchAction
from appium.webdriver.common.touch_action import TouchAction
#press:点击坐标,move_to:移动到某个坐标,release:释放鼠标,perform:执行以上所有操作
TouchAction(driver).press(x=650,y=640).wait(1500).move_to(x=100,y=640).release().perform()
2.打开系统通知栏(下拉:open_notifications)
driver.open_notifications()
3.模拟按键(press_keycode)
返回键:
driver.press_keycode(4)
home键:
driver.press_keycode(3)
4.通过元素坐标点击按钮
1.方式一(tap):
#通过元素定位查看元素的左边边界
#计算中点,得到被点击的坐标
driver.tap([650,51])
注意:由于不同手机的分辨率不同,导致通过坐标进行点击会出现不稳定的情况
解决办法:
- 使用size=driver.get_window_size()获取屏幕尺寸,然后通过百分比确定坐标
- 如下代码:
size=driver.get_window_size() #获取屏幕尺寸
#driver.tap([(650,50)]) #原先元素的坐标
print(650/size['width'],50/size['height']) #得到一个百分比 0.9 0.039
driver.tap([(int(size['width']*0.9),int(size['height']*0.039))]) #通过百分比换算的元素坐标
2.方式二(TouchAction):
from appium.webdriver.common.touch_action import TouchAction
TouchAction(driver).press(x=1009, y=122).release().perform()
5.长按操作(TouchAction)
el=driver.find_element_by_id('su')
#duration=10000:长按10秒
TouchAction(driver).long_press(el,duration=10000).perform()
6.双击
TouchAction(self.driver).tap(self.locator(loc)).wait(200).tap(self.locator(loc)).perform()
7.辅助操作(安装,打开,后台运行,终止运行,卸载)
#安装指定路径下的apk
driver.install_app(r'F:\手机测试_python\微信小程序开发和Appium\4.Appium-概念和入门案例\要用的软件\被测的app\kaoyan3.1.0.apk')
#打开指定包名的app
driver.activate_app('com.tal.kaoyan')
#后台运行10秒,再切换回前台
driver.background_app(10)
#终止指定包名app的运行
driver.terminate_app('com.tal.kaoyan')
#卸载指定包名的app
driver.remove_app('com.tal.kaoyan')
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!