取款密码输入

出于安全的考虑,一般手机APP的取款密码输入,都会有定制的键盘,即是与手机自带的键盘不同,也是uiautomatorviewer.bat无法定位的控件元素,碰到这问题,自然很是纠结头大,尝试各种方式。

 

小主找了很多资料,有些参考方式供大伙瞄瞄,如下的是来自TesterHome一位大神的热心分享:

这个问题的解决思路如下:
1.针对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坐标}])这个方法就可以点击了。

实际上就是点击坐标,把各个键位的相对位置用哈希表存起来,用整个输入框的初始x,y加上长宽乘以相对位置就有坐标了,然后你想怎么点怎么点~ 把这些代码封装一下就很好用了

用哈希表+input tap

 谢谢,这个问题已经解决了,是driver定义的时候用的AppiumDriver ,改成AndroidDriver就可以了,不是driver.sendkeyevent()而是用driver.presskeycode()

 

小主任务在身,没有时间逐一尝试这两种方式,但基于所要测试的APP,直接使用appium的send_keys,但需要注意的是,在输入值前,需要点击所输入的编辑框

self.login_handle.click_get_password()
self.login_handle.clear_password()
self.login_handle.send_password(password_pass)

 有关于大神提到的两个方法,后期再尝试。

posted @ 2018-05-25 09:29  坤坤^_^  阅读(481)  评论(0编辑  收藏  举报