当前位置:   article > 正文

python-app自动化测试知识详解_python app 自动化

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

  1. el_pass=driver.find_element_by_accessibility_id('密码 安全')
  2. el_pass.click()
  3. time.sleep(1)
  4. 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)

例():

  1. #获取屏幕尺寸
  2. app_size=driver.get_window_size()
  3. print('手机屏幕的尺寸',app_size)
  4. x=app_size['width']
  5. y=app_size['height']
  6. #左滑(2次)
  7. for i in range(0,2):
  8. driver.swipe(start_x=x*0.9,
  9. start_y=y*0.5,
  10. end_x=x*0.3,
  11. end_y=y*0.5,
  12. duration=1000)
  13. time.sleep(1)
  14. #点击立即体验
  15. el_tiyan=driver.find_element_by_id("com.tal.kaoyan:id/activity_splash_guidfinish")
  16. el_tiyan.click()
  17. print('输入用户名')
  18. # el_user = driver.find_element_by_id("com.tal.kaoyan:id/login_email_edittext")
  19. el_user=driver.find_element_by_android_uiautomator('new UiSelector().text("请输入用户名")')
  20. el_user.send_keys("xugang")
  21. print('输入密码')
  22. el_passwd = driver.find_element_by_id("com.tal.kaoyan:id/login_password_edittext")
  23. el_passwd.send_keys('xugang_123')
  24. print("请点击登录")
  25. el_login=driver.find_element_by_android_uiautomator('new UiSelector().text("登录").resourceId("com.tal.kaoyan:id/login_login_btn")')
  26. el_login.click()
  27. time.sleep(10)
  28. driver.quit()
方式2:drag_and_drop
  1. #将元素e1拖拽到元素e2
  2. driver.drag_and_drop(e1,e2)
方式3:TouchAction
  1. from appium.webdriver.common.touch_action import TouchAction
  2. #press:点击坐标,move_to:移动到某个坐标,release:释放鼠标,perform:执行以上所有操作
  3. 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):
  1. #通过元素定位查看元素的左边边界
  2. #计算中点,得到被点击的坐标
  3. driver.tap([650,51])

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

解决办法:

  1. 使用size=driver.get_window_size()获取屏幕尺寸,然后通过百分比确定坐标
  2. 如下代码:
  1. size=driver.get_window_size() #获取屏幕尺寸
  2. #driver.tap([(650,50)]) #原先元素的坐标
  3. print(650/size['width'],50/size['height']) #得到一个百分比 0.9 0.039
  4. driver.tap([(int(size['width']*0.9),int(size['height']*0.039))]) #通过百分比换算的元素坐标
2.方式二(TouchAction):
  1. from appium.webdriver.common.touch_action import TouchAction
  2. TouchAction(driver).press(x=1009, y=122).release().perform()
5.长按操作(TouchAction
  1. el=driver.find_element_by_id('su')
  2. #duration=10000:长按10
  3. TouchAction(driver).long_press(el,duration=10000).perform()
6.双击
TouchAction(self.driver).tap(self.locator(loc)).wait(200).tap(self.locator(loc)).perform()
7.辅助操作(安装,打开,后台运行,终止运行,卸载
  1. #安装指定路径下的apk
  2. driver.install_app(r'F:\手机测试_python\微信小程序开发和Appium\4.Appium-概念和入门案例\要用的软件\被测的app\kaoyan3.1.0.apk')
  3. #打开指定包名的app
  4. driver.activate_app('com.tal.kaoyan')
  5. #后台运行10秒,再切换回前台
  6. driver.background_app(10)
  7. #终止指定包名app的运行
  8. driver.terminate_app('com.tal.kaoyan')
  9. #卸载指定包名的app
  10. driver.remove_app('com.tal.kaoyan')

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/空白诗007/article/detail/844877
推荐阅读
相关标签
  

闽ICP备14008679号