【appium + python】APP自动化测试(四)元素定位详解(2)以及一些操作方法

屏幕横屏时使用uiautomatorviewer.bat定位元素

屏幕横屏时,连接手机直接定位元素,会出现右侧控件树与左侧控件错位的现象,解决办法为将当前界面保存后,屏幕截屏横屏后再次导入:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

操作方法

滑动进度条

首先需要获取元素的长和宽:

width = element.size.get("width")
height = element.size.get("height")

获取元素在屏幕所在的x和y位置:

x = element.location.get("x")
y = element.location.get("y")

使用的是swipe方法:

driver.swipe(x, y, x + int(width*percent), y, 1000)

swipe语法为:
swipe(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:滑动所需的时间,时间为ms

实例代码中滑动起始点为进度条的起始点,percent为百分比,如50%,滑动结束点为进度条50%的地方

这是横向进度条,纵向进度条方法相同,把滑动结束点的y坐标更改为y + int(height*percent) 即可

滑动屏幕

滑动屏幕与滑动进度条所用方法相同,但要获取的是屏幕的大小:

l = driver.get_window_size()
width = l["width"]
height = l["height"]
driver.swipe(x1, y1, x2, y2, timeout)

其中向上滑,y1可设为 height * 1,y2可设为height * 0.1
向左滑,x1可设为width * 0.8,x2可设为width * 0.2
向下滑向右滑同理;

获取元素内容(可用来获取音乐或视频的时长)

text = element.get_attribute("text")

若界面上已显示音乐或视频时长,可获取此元素值,返回值类型为string;
例如界面显示时长为3:16

text_list = text.split(':')
m = float(text_list[0])
s = float(text_list[1])
t = m * 60 + s
#和wait或者sleep一起使用,可等待音乐或视频播放结束

元素长按

TouchAction(driver).long_press(element, duration=timeout).release().perform()

element为需要长按的元素,也可替换为x,y,长按屏幕上的某一点;duration为需要长按的时长
源代码:

    def long_press(
        self,
        el: Optional['WebElement'] = None,
        x: Optional[int] = None,
        y: Optional[int] = None,
        duration: int = 1000,
    ) -> 'TouchAction':
        """Begin a chain with a press down that lasts `duration` milliseconds

        Args:
            el: the element to press
            x: x coordiate to press. If y is used, x must also be set
            y: y coordiate to press. If x is used, y must also be set
            duration: Duration to press

        Returns:
            `TouchAction`: Self instance
        """
        self._add_action('longPress', self._get_opts(el, x, y, duration))
        return self

元素输入

有三种方法:

  1. send_keys:在已有内容后面追加,如果需要替换,需要element.clear()
  2. set_value:在已有内容前面追加,如果需要替换,需要element.clear()
  3. set_text:替换

使用方法均为:
element.send_keys(value)
element.set_value(value)
element.set_text(value)

切换输入法

driver.activate_ime_engine(value)

value为想要切换的输入法的activity,例如appium的输入法为:
io.appium.settings/.UnicodeIME
切换讯飞的输入法为:
com.iflytek.inputmethod/.FlyIME

可使用adb shell ime list -s 查看手机已安装输入法

Android 系统按键值

driver.keyevent(value)
driver.press_keycode(value)

常用键:
KEYCODE_HOME 按键Home 3
KEYCODE_MENU 菜单键 82
KEYCODE_BACK 返回键 4
KEYCODE_ENTER 回车键 66
等等

使用时遇到一个小问题,就是使用搜狗输入法时,使用回车键keyevent,回车失败,因测试对输入法暂无要求,所以使用讯飞输入法进行测试,可回车成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值