银行卡号一般都有10位以上的,然后无论在网页还是手机APP上输入,都会每输入4位自动有个空格,对于自动化输入的数字字符就有一定的小小挑战。
小主研究了好久才解决这难题,下面是小主的纠结过程。
1.Appium的send_keys方法
直接使用send_keys方法,直到输入的值与期望的值一致为止。
粗糙版
flag = True # 初始化输入后获取的银行账号是否与预期值一致 while flag: payee_account = '6235 9574 0000 6141 031' # 清除 self.login_handle.clear_payee_account_code() time.sleep(5) # 输入银行账号 self.login_handle.send_payee_account_code(payee_account) # 获取输入后的银行账号 time.sleep(5) # 没有使用get_payee_account_code,是因为输出的值为空,暂时使用以下的取值方式 payee_account_after = self.driver.find_elements_by_id('com.gdnybank.m:id/m_combin_edit')[1].get_attribute( "text") print('输入后银行账号:', payee_account_after) time.sleep(5) if payee_account == payee_account_after: flag = False print('输入正确,退出循环')
前期很惊喜,因为终于输入进去了,但有个问题,appium输入法真的不稳定,所以要等到输入正确为止,还真需要些时间,这时间足以完成一条用例的手工执行。
再按照python3的while循环来优化脚本,如下
精简版
# 判断当所输入账号与预期的不一致时,则输入,否则继续下一步选择银行名称 payee_account = 0 payee_account_after = 1 while payee_account != payee_account_after: payee_account = '6235 9574 0000 6141 031' # 清除 self.login_handle.clear_payee_account_code() time.sleep(5) # 输入银行账号 self.login_handle.send_payee_account_code(payee_account) # 获取输入后的银行账号 time.sleep(2) payee_account_after = self.driver.find_elements_by_id('com.gdnybank.m:id/m_combin_edit')[1].get_attribute( "text") print('输入后银行账号:', payee_account_after)
2.Appium的press_keycode方法
受不了上面如此活跃性的输入方法
某天在TesterHome看到位大神的分享,链接https://testerhome.com/topics/6267
class Press_Keycode: def __init__(self, driver): self.driver = driver # 验证使用press_Keycode方法来输入银行卡号 def press_Keycode(self,stringInput,element): #将银行卡号字符串转化成字符数组 input_str=(','.join(stringInput)).split(',') # print('input_str方法press_Keycode:', input_str) #通过模拟物理按键用for循环每次输入一个字符输入手机号 for i in range(len(input_str)): #用press_keycode方法模拟键盘逐个字符输入 # print('int(input_str[' + str(i) + ']:', int(input_str[i])) self.driver.press_keycode(int(input_str[i]) + 7) #通过当前输入框内内容的长度来判断前端加空格截断后是否有多输入,有则删除多输入的 if len((element.text).replace(" ", "")) > i+1: self.driver.press_keycode(67) #保持焦点在输入框内且每次输入单个字符后,将光标置到最后 if i == len(input_str)/2: # print('len(input_str)/2:', len(input_str)/2) element.click() self.driver.press_keycode(123)
至于为什么在下面语句上加7,小主给你科普下
self.driver.press_keycode(int(input_str[i]) + 7)
KEYCODE
调试
键名 描述 键值
KEYCODE_0 按键'0' 7
KEYCODE_1 按键'1' 8
KEYCODE_2 按键'2' 9
KEYCODE_3 按键'3' 10
KEYCODE_4 按键'4' 11
KEYCODE_5 按键'5' 12
KEYCODE_6 按键'6' 13
KEYCODE_7 按键'7' 14
KEYCODE_8 按键'8' 15
KEYCODE_9 按键'9' 16
KEYCODE_A 按键'A' 29
KEYCODE_B 按键'B' 30
KEYCODE_C 按键'C' 31
KEYCODE_D 按键'D' 32
KEYCODE_E 按键'E' 33
KEYCODE_F 按键'F' 34
KEYCODE_G 按键'G' 35
KEYCODE_H 按键'H' 36
KEYCODE_I 按键'I' 37
KEYCODE_J 按键'J' 38
KEYCODE_K 按键'K' 39
KEYCODE_L 按键'L' 40
KEYCODE_M 按键'M' 41
KEYCODE_N 按键'N' 42
KEYCODE_O 按键'O' 43
KEYCODE_P 按键'P' 44
KEYCODE_Q 按键'Q' 45
KEYCODE_R 按键'R' 46
KEYCODE_S 按键'S' 47
KEYCODE_T 按键'T' 48
KEYCODE_U 按键'U' 49
KEYCODE_V 按键'V' 50
KEYCODE_W 按键'W' 51
KEYCODE_X 按键'X' 52
KEYCODE_Y 按键'Y' 53
KEYCODE_Z 按键'Z' 54
感谢上面的大神好心分享,解决纠结我半个月的难题