Appium+银行卡号输入

银行卡号一般都有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

 

感谢上面的大神好心分享,解决纠结我半个月的难题

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