移动端自动化笔记

1、启动手机脚本

#coding:utf-8
import os
import time
import unittest
from appium import webdriver

#存放配置的连接参数
desired_caps={}
desired_caps['platformName']='Android'
desired_caps['version']='8.0.0'
#避免重签名
desired_caps["noSign"] = "true"
#避免重装
desired_caps["noReset"] = "true"
# 启用UNICODE输入,可以输入中文
desired_caps["unicodeKeyboard"] = True
#输入文字时,不打开手机键盘,也可以在手机设置中更改
desired_caps["resetKeyboard"] = True
desired_caps['deviceName']='SJE5T17819012115'#这是测试机的型号,可以查看手机的关于本机选项获得
# desired_caps['app'] = PATH('D:\\qq.apk')#被测试的App在电脑上的位置
desired_caps['appPackage'] = 'com.yitong.zjrc.mfs.android'
desired_caps['appActivity'] = 'com.yitong.mbank.app.android.activity.SplashActivity'
driver=webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_caps)
time.sleep(3)
 

2、元素定位方式

1、抓取对象方式:

(1)#根据name进行定位,对于android来说,就是text属性
driver.find_element_by_name(u"登 录").click() ,但是appiium1.9不能使用该方法

(2)根据xpath进行定位

my_count = driver.find_element_by_xpath('//*[@text="我的账户"]'),使用相对路径的方法,利用文本内容获取对象。上级路径未知部分用*表示

丰收互联中,所有组件有区别的属性一般只有text。使用Automator自动识别出的xpath类似用浏览器开发者工具识别出的结果,即绝对路径,一般采用数组定位的,不推荐。

如采用find_element_的,如结果有多个对象,则默认定位到第一个。否则使用find_elements_

2、其他补充:

ID定位

# resourceId属性的方法
driver.find_element_by_id('com.lizi.app:id/setting_imageView').click()  

#以accessibility_id进行定位,对Android而言,就是content-description属性
driver.find_element_by_accessibility_id('push_button').click() 

ClassName 定位

# 定位唯一元素 
self.driver.find_element_by_class_name("android.widget.EditText")  

# 找到所有android.widget.EditText并定位第一个
self.driver.find_elements_by_class_name("android.widget.EditText")[0] 

Name 定位:某些appium版本不支持

#根据name进行定位,对于android来说,就是text属性
driver.find_element_by_name(u"登 录").click() 

 Xpath 定位:可根据某一个元素属性定位

driver.find_elements_by_xpath('//android.widget.TextView[@resource-id="com.mzdk.app:id/item_good_title"]')[1].click()

3、输入框:

密码键盘无法使用send_keys方法输入,实现思路如下:

对手机数字全键盘进行截屏,并对每个数字或者字母进行截屏。操作时,传入要点击的数字或字母名字以及对应的图片名字,与全键盘图片进行比较,确定其坐标,手机上点击(使用TouchAction)相应的坐标位置即可。但要注意,手机全键盘可以使用automator截屏,但是数字键盘必须使用画图编辑器进行截取,不能改变其原有的分辨率。

主要使用cv2图像处理中的匹配算法实现:res = cv2.matchTemplate(img_rgb, template, cv2.TM_CCOEFF_NORMED)

4、appium+python:触摸操作和多点触控(TouchAction、MultiTouch):主要针对手势操作,比如滑动、长按、拖动等。针对最新版本(5.0.4)已不支持swipe等方法,所以可以用TouchAction类来封装成新的swipe方法。详见Appium自动化测试之 TouchAction 操作

猜你喜欢

转载自blog.csdn.net/figo8875/article/details/86506803