1、你们开发是怎么做这种键盘的,找他们要控件的获取方法。
2、如果只是简单的 ui 测试 demo 就用 ATX,或者用 ATX 所用的图片对比技术来做。
我们这个 APP 是金融交易,为了提高安全才做的这个键盘。
刚刚问了下,做这个键盘的开发已离职 ,我不是为了做这个 UI 测试,是想登录成功后进行交易那块的测试。
还有啥法子能解决么?
开发走了代码应该还在呀,哪个开发接手的?如果不行就你就用 ATX 咯。
自己想办法,这里不是伸手党的地方。
最傻的办法 tap 坐标。等有了好办法再修改
可以考虑用 adb shell input 模拟输入
http://blog.bihe0832.com/adb-shell-input.html
你要是写邮件报 bug,标题写那么长,我就服你。
self.driver.find_element_by_id("com.jme.trade:id/et_password").click()
#self.driver.keyevent(12)
#self.driver.press_keycode(11)
os.popen("adb shell input keyevent 12")
该方法也使用过了,仍没有跨过安全键盘这个槛,像招商银行的登录页面,输入密码时的数字键每次也是随机排列的
把密码放到粘贴板, 然后看能不能发送 Ctrl + v 粘贴到文本框
driver.pressKeyCode(50, AndroidKeyMetastate.META_CTRL_ON);
实在不行那就只能用傻瓜式的方法 find_element
这个问题的解决思路如下:
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 坐标}]) 这个方法就可以点击了。
我也想到 OCR,但其实没必要获取位置,目前能想到的动态键盘,其实键位都是固定的,坐标可以当常量保存下来。
只要扫描知道每排按键都是什么字符就好了。
当然,要是谁非要做键位坐标也随机的,那也没脾气,要用你的方法扫