APP自动化测试基础

一、使用appium 打开app

 想要使用自动化代码来控制APP,我们就需要用appium

1、连接移动端APP

首先打开Pycharm,我们输入

caps={
    "platform":"android",    #我们要链接的系统是安卓
    "platformVersion":"9",   #系统的版本是安卓9版本
    "deviceName":"emulator-5554",   #你连接的机器号
    "noReset":True,
    "appPackage":"com.tal.kaoyan",  #你要打开的软件,这里填的是包名
    "appActivity":".ui.activity.SplashActivity"   #你打开的APP的活动窗口名
}

noReset这个参数是用来控制是否清除session信息的。

当不使用这个参数,默认为False的时候。如果上一个测试用例登录成功过了。下一个测试用例,在打开app时,进来的还是app打开的初始页面。是不会记录登录状态的

当使用这个参数,将至设置成True。如果上一个测试用例登陆成功了,下一个测试用例,在打开app时,进来的页面是登录成功后的页面。会保持登录状态

 接下来我们连接移动端,模拟器或者真机

driver=webdriver.Remote("http://localhost:4723/wd/hub", caps)

localhost:4723 这块是IP地址和端口号,如果你是本地的模拟器就用localhost:4723,如果是真机就去看你手机的IP地址,然后加上这个端口

 以上是连接APP的,我们同样可以连接移动端的浏览器

2、连接移动端浏览器

目前使用的安卓是谷歌在原生安卓基础上开发的,所以内置浏览器默认也就Chrom的内核,所以跟WEB自动化差不多的操作,接下来演示如何连接

我们首先要知道手机浏览器的版本号是多少,我们先打开手机或者模拟器的浏览器,然后打开电脑端的Chrom,在地址栏输入:

chrome://inspect/#devices

 我们能看到这个页面,这个东西就是你的手机浏览器的版本号

然后我们输入这个链接去下载相关的东西

https://chromedriver.storage.googleapis.com/index.html

找到对应的版本下载

下载完成解压,直接把这个.exe文件拖到Pycharm中就行了

准备工作做完以后我们就能开始对浏览器进行操作了

caps={
  "platformName": "Android",
  "platformVersion": "9",
  "deviceName": "emulator-5554",
  "noReset": True
}

caps['browserName']='Browser'
caps['automationName']='UiAutomator2'
caps['chromedriverExecutable']=r"E:\app\APP_auto\chromedriver.exe"  # r 防止转译

 剩下的一些打开页面什么的,定位什么的都跟Web自动化一样

二、app元素定位

resource-id

其实就是通过By.ID 来定位

driver.find_element(By.ID,"login_email_edittext").send_keys("zhangtiedan1")

className

其实就是通过控件名来定位

driver.find_element(By.CLASS_NAME,'android.widget.EditText').send_keys("zhangtiedan1")

content-desc

其实就是通过By.Accessibility_id

某个元素属性: content-desc = “option_selected_icon”

上面的content-desc元素,可以有多种方式进行定位:

方式一:使用 find_element_by_accessibility_id 定位
driver.find_element(By.ACCESSIBILITY_ID,'option_selected_icon')
方式二:使用 find_element_by_android_uiautomator 定位
driver.find_element(By.ANDROID_UIAUTOMATOR,'new UiSelector().description("option_selected_icon")')
方式三:使用 xpath 定位
driver.find_element(By.XPATH, '//*[@content-desc="option_selected_icon"]')

xpath 通过By.XPATH

其实就是这个元素在页面中的空间的层次

driver.find_element(By.XPATH,"//android.widget.EditText[@text='请输入密码']").send_keys("zhangtiedan123")

通过UIAutomator方式来定位

常用的定位方式有:

id:对应Android属性的resource_id

driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,"new UiSelector().resourceId(\"\")")

元素定位第一中方式resource-id,写法

ele = driver.find_element(By.ID,'com.tal.kaoyan:id/login_email_edittext')

text:对应Android的text
 

driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,"new UiSelector().text(\"请输入密码\")").send_keys("zhangtiedan123")

classname:对应Android属性的class
 

driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,"new UiSelector().className(\"android.widget.Button\")").click()

还可以使用text文本内容进行查找

driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,"new UiSelector().text(\"请输入密码\")").send_keys("zhangtiedan123")
driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,"new UiSelector().textContains(\"密码\")").send_keys("zhangtiedan3")
driver.find_element(MobileBy.ANDROID_UIAUTOMATOR,"new UiSelector().textStartsWith(\"登\")").click()

组合定位

 一般组合用id、class、text这三个属性会比较好一点

例:id+class 属性组合

id_class = 'resourceId("com.xyh.commerce:id/ll_personal").className("android.widget.LinearLayout")'
driver.find_element(By.ANDROID_UIAUTOMATOR,id_class).click()

三、对手机的一些常用操控

这里就不只是对APP的操作了,就是模拟人对手机的一些操作了

caps={
  "platformName": "Android",
  "platformVersion": "9",
  "deviceName": "emulator-5554",
  "noReset": True
}

driver =webdriver.Remote("http://127.0.0.1:4723/wd/hub",caps)

不废话直接看代码

#捏屏幕(PINCH) (双指往内移动来缩小屏幕):对指定元素进行缩小
driver.pinch(element)
#zoom(放大:在某元素上执行放大操作):对指定元素进行放大
driver.zoom(element)
#滑动
driver.swipe(15,865,15,440,300)
#快速滑动
driver.flick(15,865,15,440)
#重置应用
driver.reset()
#手机屏幕息屏,时间是以秒为单位
driver.lock(5)
time.sleep(3)
#打开通知栏
driver.open_notifications()
time.sleep(2)
#返回通知栏
driver.press_keycode(4)
#点击手机上对应的按钮
driver.press_keycode(3)
#长时间点击手机上的某一个按钮
driver.long_press_keycode(keycode)
#安装apk
driver.install_app("F:\\BaiduNetdiskDownload\\app自动化工具\\mymoney.apk")
#用来检验是否安装那个应用没有,参数是应用的包名
b= driver.is_app_installed("com.tal.kaoyan")
print(b)
#根据包名和活动窗口打开某个应用
driver.start_activity("com.mymoney",".biz.splash.SplashScreenActivity")
#显示等待某个窗口的加载,等待最长时间为5秒,每0.5验证一次
driver.wait_activity(".biz.main.MainActivity",5,0.5)
#返回活动窗口
print(driver.current_activity)
#获得窗口后,让这个软件后台运行几秒
driver.background_app(5)
#删除对应的app 根据包名删除
driver.remove_app("com.mymoney")
driver.hide_keyboard(隐藏设备上的键盘)
#手指点击
driver.tap([(89,541),(346,541),(84,443)],300)

常用的操作就这些,重要的是上面的APP的各种定位方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Betray391

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值