关于银行等带有安全控件插件的输入selenium无法sendkeys的解决方案

前言

最近在做与银行等第三方交互的UI测试发现,selenium对带有安全控件的输入框senkeys不起作用,此时需要换思路解决。放弃selenium的输入。以下是自己整理的解决方案,供大家参考,如有不对,请指正。

解决方案

采用第三方虚拟键盘DD XOFT(完美解决),这种方案持续集成不方便,或者暂未找到解决方案(待研究);
采用autoi调用银行插件,最后转成可执行.exe文件,在代码中直接调用,前提是每次都需要安装安全控件,目前,我所在项目只需要安装一次;

场景描述

再利用selenium做自动化测时候,遇到带有安全插件的密码输入框:
第一 次需要安装:

安装以后:

实现代码

1.本次利用python代码实现输入代码:

#!/usr/bin/env python
from ctypes import *
import time
import os
import win32api
class dd_input():

def __init__(self):
    parentDirPath = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
    path = parentDirPath + ("\\dll\\DD81200x64.64.dll")

    self.dd_dll = windll.LoadLibrary(path)

    # DD虚拟码,可以用DD内置函数转换。
    self.vk = {'5': 205, 'c': 503, 'n': 506, 'z': 501, '3': 203, '1': 201, 'd': 403, '0': 210, 'l': 409, '8': 208, 'w': 302,
            'u': 307, '4': 204, 'e': 303, '[': 311, 'f': 404, 'y': 306, 'x': 502, 'g': 405, 'v': 504, 'r': 304, 'i': 308,
            'a': 401, 'm': 507, 'h': 406, '.': 509, ',': 508, ']': 312, '/': 510, '6': 206, '2': 202, 'b': 505, 'k': 408,
            '7': 207, 'q': 301, "'": 411, '\\': 313, 'j': 407, '`': 200, '9': 209, 'p': 310, 'o': 309, 't': 305, '-': 211,
            '=': 212, 's': 402, ';': 410}
    # 需要组合shift的按键。
    self.vk2 = {'"': "'", '#': '3', ')': '0', '^': '6', '?': '/', '>': '.', '<': ',', '+': '=', '*': '8', '&': '7', '{': '[', '_': '-',
            '|': '\\', '~': '`', ':': ';', '$': '4', '}': ']', '%': '5', '@': '2', '!': '1', '(': '9'}

def down_up(self, code):
    # 进行一组按键。
    self.dd_dll.DD_key(self.vk[code], 1)
    self.dd_dll.DD_key(self.vk[code], 2)

def dd(self, i):
    # 500是shift键码。
    if i.isupper():
        # 如果是一个大写的玩意。

        # 按下抬起。
        self.dd_dll.DD_key(500, 1)
        self.down_up(i.lower())
        self.dd_dll.DD_key(500, 2)

    elif i in '~!@#$%^&*()_+{}|:"<>?':
        # 如果是需要这样按键的玩意。
        self.dd_dll.DD_key(500, 1)
        self.down_up(self.vk2[i])
        self.dd_dll.DD_key(500, 2)
    else:
        self.dd_dll.DD_key(203, 1)
        self.dd_dll.DD_key(203, 1)
        self.dd_dll.DD_key(203, 1)
        self.dd_dll.DD_key(203, 1)
        self.dd_dll.DD_key(203, 1)
        self.dd_dll.DD_key(203, 1)
        # # self.dd_dll.DD_key(206, 1)
        # # self.dd_dll.DD_key(204, 1)
        # # self.dd_dll.DD_key(202, 1)
        # # self.dd_dll.DD_key(203, 1)
        # # self.dd_dll.DD_key(205, 1)
        # # self.dd_dll.DD_key(209, 1)

# input("按任意键继续...")
# 之后等待两秒。
time.sleep(2)
# 测试按键。

# 释放dll
def shifang(self):
    win32api.FreeLibrary(self.dd_dll._handle)
if __name__ == "__main__":
	dd_input = dd_input()
	for i in '3642359':
		dd_input.dd(i)
	for i in '3642359':
		dd_input.dd(i)
	dd_input.shifang()'''

2.调用代码:

    def   chongzhi(self, username):
			self.home.home()
			self.login.login(username, "xxxxxxxx")
			time.sleep(5)
			freeAmt_q = self.cz.huoqu_freeAmt().replace(',', '')
			print("充值前可用余额为:" + freeAmt_q)
			czje = 200000.00
			self.cz.chongzhi()
			self.lf.click_huoqu()
			self.lf.input_smsCode()
			self.lf.input_mima()
			time.sleep(5)
			for i in '3642359':
			self.dd_input.dd(i)
			for i in '3642359':
			self.dd_input.dd(i)
			self.dd_input.shifang()
			time.sleep(5)
			self.lf.click_querenzhifu()
			time.sleep(10)
			self.driver.refresh()
			time.sleep(10)
			self.driver.refresh()
			time.sleep(10)
			freeAmt_h = self.cz.huoqu_freeAmt().replace(',', '')
			print("充值后可用余额为:" + freeAmt_h)
			# 转换成float参与运算,然后转成字符串,在取字符串值保留两位小数转成字符串进行assertEquals断言
			x = str("%.2f" % eval(str(float(freeAmt_q)+czje)))
			self.assertEqual(freeAmt_h, x, msg="充值成功!")

总结

以上代码实现自动输入,在集成到Jenkins上遇到问题,将执行函数写成批处理在执行过程中无法调用DD81200x64.64.dll,有时间在研究。
dd虚拟键盘地址:http://www.ddxoft.com/

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NealHuiwen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值