美文网首页百人计划
Appium自动化使用坐标定位元素

Appium自动化使用坐标定位元素

作者: 葛木瓜 | 来源:发表于2018-04-11 23:57 被阅读15次

1. 缘 由

为什么要用坐标定位元素呢?原因很简单,uiautomatorviewer无法定位该元素!

2. 场 景

目前我遇到无法定位的两种情况:

  • 页面处于动态期间,如IM软件的视频或语音聊天期间,虽然元素可以正常定位,但是用click()无法触发点击事件
  • 有些页面弹框上的元素,用uiautomatorviewer工具定位,只能定位某一片区域,具体的元素无法定位

3. 实 现

对于以上两种无法定位元素的情况,可以考虑用坐标定位

  • 动态页面可以使用swipe()触发点击事件
# x1/y1和 x2/y2分别为起/止点的坐标,time为时间,单位为ms
driver.swipe(x1, y1, x2, y2, time)
'''
Usage:
      driver.swipe(120, 200, 120, 200, 50)
      定位坐标为(120, 200)的元素,并点击
'''
  • 定位不到的元素可以使用driver.tap()触发点击事件
# 模拟手指点击(最多五个手指),time为时间,单位为ms
driver.tap([(x1, y1), (x2, y2)], time)
'''
Usage:
      driver.tap([120, 200], 10)
      定位坐标为(120, 200)的元素,并点击
'''

4. 问 题

以上两种坐标定位都使用元素的绝对坐标,如更换模拟器分辨率,元素坐标也会随之改变,此时就需要将当前分辨率下的绝对坐标转换为相对坐标,方法如下:

# 获取当前分辨率
el_x = driver.get_window_size()['width']
el_y = driver.get_window_size()['height']

# 绝对坐标转换为相对坐标,假设当前分辨率为720x1280,绝对坐标为(120, 200)
xd_x = (120/720)*el_x
xd_y = (200/1280)*el_y
>> (xd_x, xd_y)  # 相对坐标

5.参 考

相关文章

网友评论

    本文标题:Appium自动化使用坐标定位元素

    本文链接:https://www.haomeiwen.com/subject/ailtkftx.html