场景:在使用appium做自动化测试,短信验证码输入框,使用send_keys(),报错
selenium.common.exceptions.InvalidElementStateException: Message: Cannot set the element to ‘123456’. Did you interact with the correct element?
解决方案:使用press_keycode()
# encoding=utf-8
import unittest
class KeyboardKeys():
'''
模拟键盘按键类
'''
# 数字0-9对应的Keycode
number_CODE = {
'0': 7,
'1': 8,
'2': 9,
'3': 10,
'4': 11,
'5': 12,
'6': 13,
'7': 14,
'8': 15,
'9': 16
}
# 手机键
phone_CODE = {
'KEYCODE_CALL': 5, # 拨号键
'KEYCODE_ENDCALL': 6, # 挂机键
'KEYCODE_HOME': 3, # 按键Home
'KEYCODE_MENU': 82, # 菜单键
'KEYCODE_BACK': 4, # 返回键
'KEYCODE_SEARCH': 84, # 搜索键
'KEYCODE_CAMERA': 27, # 拍照建
'KEYCODE_FOCUS': 80, # 拍照对焦键
'KEYCODE_POWER': 26, # 电源键
'KEYCODE_NOTIFICATION': 83, # 通知键
'KEYCODE_MUTE': 91, # 话筒静音键
'KEYCODE_VOLUME_MUTE': 164, # 扬声器静音键
'KEYCODE_VOLUME_UP': 24, # 音量增加键
'kEYCODE_VOLUME_DOWN': 25 # 音量减小键
}
# 控制键
control_CODE = {
'KEYCODE_ENTER': 66, # 回车键
'KEYCODE_ESCAPE': 111, # ESC键
'KEYCODE_DAPD_CENTER': 23, # 导航键 确定键
'KEYCODE_DAPD_UP': 19, # 导航键 向上
'KEYCODE_DAPD_DOWN': 20, # 导航键 向下
'KEYCODE_DAPD_LEFT': 21, # 导航键 向左
'KEYCODE_DAPD_RIGHT': 22, # 导航键 向右
'KEYCODE_MOVE_HOME': 122, # 光标移动到开始键
'KEYCODE_MOVE_END': 123, # 光标移动到末尾键
'KEYCODE_PAGE_UP': 92, # 向上翻页键
'KEYCODE_PAGE_DOWN': 93, # 向下翻页键
'KEYCODE_DEL': 67, # 退格键
'KEYCODE_FORWARD_DEL': 112, # 删除键
'KEYCODE_INSERT': 124, # 插入键
'KEYCODE_TAB': 61, # Tab键
'KEYCODE_NUM_LOCK': 143, # 小键盘锁
'KEYCODE_CAPS_LOCK': 115, # 大写锁定
'KEYCODE_BREAK': 121, # Break/Pause键
'KEYCODE_SCROLL_LOCK': 116, # 滚动锁定键
'KEYCODE_ZOOM_IN': 168, # 放大键
'KEYCODE_ZOOM_OUT': 169 # 缩小键
}
# 组合键
combi_CODE = {
'KEYCODE_ALT_LEFT': 'ALT+LEFT',
'KEYCODE_ALT_RIGHT': 'ALT+RIGHT',
'KEYCODE_CTRL_LEFT': 'Control+Left',
'KEYCODE_CTRL_RIGHT': 'Control+right',
'KEYCODE_SHIFT_LEFT': 'Shift+Left',
'KEYCODE_SHIFT_RIGHT': 'Shift+right'
}
# 英文字母键
words_CODE = {
'KEYCODE_A': 29,
'KEYCODE_B': 30,
'KEYCODE_C': 31,
'KEYCODE_D': 32,
'KEYCODE_E': 33,
'KEYCODE_F': 34,
'KEYCODE_G': 35,
'KEYCODE_H': 36,
'KEYCODE_I': 37,
'KEYCODE_J': 38,
'KEYCODE_K': 39,
'KEYCODE_L': 40,
'KEYCODE_M': 41,
'KEYCODE_N': 42,
'KEYCODE_O': 43,
'KEYCODE_P': 44,
'KEYCODE_Q': 45,
'KEYCODE_R': 46,
'KEYCODE_S': 47,
'KEYCODE_T': 48,
'KEYCODE_U': 49,
'KEYCODE_V': 50,
'KEYCODE_W': 51,
'KEYCODE_X': 52,
'KEYCODE_Y': 53,
'KEYCODE_Z': 54
}
def pressNumberkey(self, no, driver):
keycode = KeyboardKeys().number_CODE[no]
driver.press_keycode(keycode)
if __name__ == '__main__':
unittest.main()