基于appium做自动化测试,APP密码键盘无法识别问题解决思路
这个问题的解决思路如下:
1.针对iOS无序键盘:首先,iOS的密码键盘是可识别的,但是,密码键盘一般是无序的。针对这个情况,思路是用Macaca或者appium-inspector来获取到每个键的信息的。首先,定义一个数据字典key_num={},把每个键的xpath保存到字典里面去。这样key_num里面保存的就是key_num[0]="第一个按键的xpath路径",key_num[1]="第二个按键的xpath路径"以此类推,记录完,整个键盘的xpath路径。然后,通过xpath的值就可以取得该元素的name值,这个值就是该键的数字,取name值方式:对象.get_attribute("name")。然后,定义另一个字典keys_num={},来保存每个按键对应的xpath和对应的数字。比如:第一个键是“6”,就写keys_num[6]="第一个键的xpath",第二个键是“4”,keys_num[4]="第二个键的xpath",以此类推,记录完整个键盘的数字和对应的xpath。这样在输入密码的时候,只要遍历密码,例如:密码是“666888”,那么密码的第一值是6,我们就取keys_num[6]的值就可以获取到“数字6”的xpath,在通过get_element_by_xpath("数字6的xpath")方式就可以获取到该元素,再用 元素.click()进行点击,就可以输入该值了。
2.针对Android无序且无法识别键盘:Android的密码键盘一般是无序而且不可识别的。我们要用到ocr这个技术,大家不要紧张,可以去找相关的ocr类库,比如用python写脚本的人就可以找python的ocr类库,使用很简单。下面说如何解决密码键盘识别问题。首先,用adb截取密码键盘界面,把键盘界面通过ocr来识别,获取到键盘数字的顺序,例如:键盘的数字顺序是“9638527410”,那么我们就可以知道该次弹出的键盘第一排是“963”,第一个键是“9”,第二个键是“6”以此类推。但是,有的人会问了“我们既然无法识别键盘,那么如何获取键盘信息呢?”,对,我们只能通过ocr获取到键盘数字排序却无法获取到按键信息。那么如何点击呢?接下来,我们打开andorid的“指针位置”这个功能,计算出每个按键在屏幕的位置(计算方式:按百分比的方式计算,即:该键在屏幕的相对位置)。然后定义字典key_num_x={},key_num_y={}分别将该键的坐标记录下来,例如第一个键的值是6那么就写key_num_x[6]="第一个键的x坐标",key_num_y[6]="第一个键的y坐标"。以此类推。记录完所有的按键信息。这样在输入密码的时候,只要遍历密码,例如:密码是“666888”,那么密码的第一值是6,我们就取key_num_x[6]和key_num_y[6]的值,在通过 driver.tap([{x坐标,y坐标}])这个方法就可以点击了。