多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

18529529812

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

Appium使用tap方法操作元素-自动化测试

更新时间:2022-03-23 09:55:54 作者:多测师 浏览:40

  tap 方法和 click 类似,都是点击界面。但是最大的区别是,tap 是针对做坐标而不是针对找到的元素。有的时候,我们难以用通常的方法定位元素的时候,可以用这个 tap 方法。看一个例子,打开开发者头条点击我的。

Appium使用tap方法操作元素-自动化测试

  既然 tap 是坐标用来点击界面的,我们怎么知道这个元素的坐标呢?大家还记得元素的 bounds 属性吗?它是标识元素的左上角和右下角坐标的,那么我们点击该元素的时候,最好点击它的中间部位。可以通过左上角、右下角坐标估算出中间部分的坐标。左上角和右下角的 X 坐标加起来除以2就是它中心点的 X 坐标,左上角和右下角的 Y 坐标加起来加起来除以2就是它中心点的 Y 坐标。

  还有一种简单的方式不需要计算,就是没必要非要往中心靠,中心点没有必要那么中心,我们手指点击的时候也不是每次都是中心,大差不差就行了,这个点我们可以直接获取到。有一个地方可以直接看到坐标。

  就是随着你光标在动的时候,数值会在变,它就是你光标所在位置的坐标。所以我们这里如果想要获取到中心点,只要手表停在上面就可以,大概是965,1845,对应的代码怎么是:

  from appium import webdriver

  desired_caps = {}

  desired_caps['platformName'] = 'Android' #测试平台

  desired_caps['platformVersion'] = '7' #平台版本,不能写错

  desired_caps['deviceName'] = 'test' #设备名称,多设备时需区分

  # desired_caps['app'] = r'd:\apk\toutiao.apk'

  desired_caps['appPackage'] = 'io.manong.developerdaily' #app package名

  desired_caps['appActivity'] = 'io.toutiao.android.ui.activity.LaunchActivity' #app默认Activity

  # desired_caps['unicodeKeyboard'] = True # 一定要有该参数,否则unicode 输入的中文无效

  desired_caps['noReset'] = True

  desired_caps['newCommandTimeout'] = 6000

  driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) #启动Remote RPC

  driver.implicitly_wait(10)

  print(driver.session_id)

  # 等待界面出现

  driver.find_element_by_class_name("android.widget.ImageButton")

  # 点击 右下角 我的

  driver.tap([(965,1845)],300)

  input('**** Press to quit..')

  driver.quit()

  这里点击就是用的 tap 方法,我们点进去看一下 tap 方法的描述。

  我们可以看到它有两个参数,第一个参数是 positions 我们看一下它的描述。an array of tuples representing the x/y coordinates of the fingers to tap. Length can be up to five. 表示点击的坐标,注意最多可以有五个坐标,代表5根手指。所以是 list 类型。

  第二个参数 duration我们看一下它的描述。(optional) length of time to tap, in ms按住停留的时间。

  由于现在我们只要点击一个元素 list 中只要一个值(表示屏幕的一个点)就可以了。停留时间也可以比较短,所以这里取值是300,表示300毫秒也就是0.3秒

  注意: 不到万不得已不要用 tap 方法,因为不同手机分辨率不同,同样的元素在不同手机的位置不同。

  如果必须要用坐标的方式,又有多种手机要测试,你可以把当前要支持屏幕分辨率的坐标事先获取到。这些元素的坐标写到一个配置文件中 比如说要支持,打开开发者头条,首先点击+进入登录界面,进入之后点左下角的邮箱,再输入用户名密码,我们用坐标做怎么做呢?你不是要支持不同的屏幕吗?我有个配置文件,事先把不同屏幕分辨率烦人的手机坐标获取到,比如说1080P的手机和720p的手机,我们这里有个叫 cfg.py 的配置文件

  coordinates = {

  '1080p':{

  '首页_+' : (548, 1839),

  '登录页_邮箱图标' : (147, 1802),

  '登录页_邮箱地址' : (264, 370),

  '登录页_邮箱密码' : (264, 570),

  '登录页_登录按钮' : (264, 780),

  },'720p': {

  '首页_+': (640, 1250),

  '登录页_邮箱图标': (147, 1802),

  '登录页_邮箱地址': (264, 370),

  '登录页_邮箱密码': (264, 570),

  '登录页_登录按钮': (264, 570),

  }

  }

  cfg_phone_resolution = '1080p'

  对应代码是

  from appium import webdriver

  desired_caps = {}

  desired_caps['platformName'] = 'Android' # 测试平台

  desired_caps['platformVersion'] = '7' # 平台版本,不能写错

  desired_caps['deviceName'] = 'test' # 设备名称,多设备时需区分

  # desired_caps['app'] = r'd:\apk\toutiao.apk'

  desired_caps['appPackage'] = 'io.manong.developerdaily' # app package名

  desired_caps['appActivity'] = 'io.toutiao.android.ui.activity.LaunchActivity' # app默认Activity

  desired_caps['unicodeKeyboard'] = True # 一定要有该参数,否则unicode 输入的中文无效

  desired_caps['noReset'] = True

  desired_caps['newCommandTimeout'] = 6000

  driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps) # 启动Remote RPC

  driver.implicitly_wait(10)

  print(driver.session_id)

  # 不得不用sleep

  import time

  time.sleep(10)

  from cfg import cfg_phone_resolution,coordinates

  coordinate = coordinates[cfg_phone_resolution]

  driver.tap([coordinate['首页_+']], 300)

  time.sleep(2)

  driver.tap([coordinate['登录页_邮箱图标']], 300)

  time.sleep(1)

  driver.tap([coordinate['登录页_邮箱地址']], 300)

  time.sleep(1)

  # 没有WebElement对象 ,如何输入字符?

  # adb shell input text ""

  import os

  os.system('adb shell input text "qqqqrss@163.com"')

  #注意,如果要输入中文,需要下载一个adb键盘应用,

  # 参考 https://blog.csdn.net/slimboy123/article/details/54140029

  time.sleep(1)

  driver.tap([coordinate['登录页_邮箱密码']], 300)

  time.sleep(1)

  os.system('adb shell input text "sdqwefsdf"')

  driver.tap([coordinate['登录页_登录按钮']], 300)

  input('**** Press to quit..')

  driver.quit()

  以上内容为大家介绍了自动化测试中的Appium使用tap方法操作元素,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

18529529812

返回顶部