屏幕横屏时使用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
元素输入
有三种方法:
- send_keys:在已有内容后面追加,如果需要替换,需要element.clear()
- set_value:在已有内容前面追加,如果需要替换,需要element.clear()
- 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,回车失败,因测试对输入法暂无要求,所以使用讯飞输入法进行测试,可回车成功