Uiautomator2坐标点击解决send_keys无效问题

1、背景

记录下安卓自动化测试的问题及解决过程,首先感谢开发同事(GH哥)的协助

在登录页面中输入密码时遇到了问题,常规u2的send_keys方法无效,表面上看脚本是成功输入了文本值,但实际点击登录却为空。

最后与开发同事确认了为空的原因是点击该输入框会弹出自定义的键盘,且不支持脚本输入,而且该键盘的每个键位元素也无法定位。

2、方法

既然无法定位键位,选择通过坐标定点点击即可。

但此时会存在另一个问题,由于不同设备的长度宽度不一,分辨率也不一样,所以坐标也不相同。但好在u2的点击方法支持坐标比例点击,所以输入键位对应的坐标比例就可以了。

方法如下:

        先获取初始键位的坐标比例,这里我将“1”设为初始键位,方便其他键位遍历获取

        因为大部分键位大小都是一样的,所以其他键位只需要遍历获取:上一个点击坐标比例+键位宽度/高度就可以了

        如果键位大小不一,那么就要另加判断去设置比例了

3、实现

经过测试,设备成功模拟点击输入了密码......但当我更换成其他设备又出现问题了,设置初始键位的坐标比例并不是适配所有设备,原因是不同设备通过比例确实能点到相同位置,但各自元素的布局并非一样。

所以先定位键盘元素再获取其距离上下的高度,最后除以屏幕高度就可以拿到键盘的坐标比例了。

最后补上全部代码

#!/usr/bin/python3
# --*-- coding: utf-8 --*--
# @Author: chenlin
# @File: u2_keyBoard.py

import uiautomator2 as device


class KeyBoard:
    def __init__(self, target_str):
        self.keyMap = {}
        self.preX = 0.055
        self.d = device.connect()
        self.preY = self.precentIni()
        self.target_str = target_str
        self.key = ['1234567890', 'qwertyuiop', '#asdfghjkl', '@zxcvbnm!']  # 这里特殊字符分别代表:大写切换、空格、退格

    def keyIni(self):
        """键盘映射"""
        for row in self.key:
            for k in row:
                if k == '@':  # 最底层特殊处理
                    self.preX = 0.1
                self.keyMap[k] = [self.preX, self.preY]
                self.preX += 0.1
            self.preX = 0.055
            self.preY += 0.089

    def pressKeyBoard(self):
        """执行点击"""
        self.keyIni()
        for i in self.target_str:
            self.d.click(*self.keyMap[i])

    def precentIni(self):
        """初始纵坐标比例"""
        device = self.d.info['displayHeight']
        keyboard = self.d(resourceId="键盘元素定位").info['bounds']
        return keyboard['top'] / device


if __name__ == '__main__':
    KB = KeyBoard('密码')
    KB.pressKeyBoard()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值