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日志的查看

  1. 自动化脚本发送http请求,请求参数:终端设置参数
  2. 创建会话
  3. 确认终端设备是否连接 并且确认安卓版本 确认设置参数是否与终端的设置是否一致
  4. Appium会推送一个包’AppiumBootstrap,jar’ 模拟器上api包:appium server指令进行接收,操控手机终端
  5. 响应http请求
  6. 下一个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-client2.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')

注意

  1. 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])

注意:由于不同手机的分辨率不同,导致通过坐标进行点击会出现不稳定的情况

解决办法:

  1. 使用size=driver.get_window_size()获取屏幕尺寸,然后通过百分比确定坐标
  2. 如下代码:
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')

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2024-01-10 11:08:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-10 11:08:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-10 11:08:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-10 11:08:01       20 阅读

热门阅读

  1. 深入理解 MyBatis-Plus 批量保存方法

    2024-01-10 11:08:01       36 阅读
  2. 安卓多用户管理之IUserManager.AIDL

    2024-01-10 11:08:01       31 阅读
  3. 第十节 登陆静态页

    2024-01-10 11:08:01       37 阅读
  4. Linux环境下使用flv.js + websokect播放RTSP视频流

    2024-01-10 11:08:01       40 阅读
  5. linux发送http请求命令

    2024-01-10 11:08:01       39 阅读
  6. Docker修改数据目录

    2024-01-10 11:08:01       32 阅读
  7. 第十五章 ECMAScript6新增的常用语法

    2024-01-10 11:08:01       36 阅读
  8. 前端使用网址收藏

    2024-01-10 11:08:01       42 阅读