web自动化时,sendkeys输入长文本时浏览器响应慢或错误时处理
在做某个测试时,要在文本框中输入大量的文本,文件内容如下:
"-----BEGIN CERTIFICATE-----\n
MIIBozCCAQwCAQEwDQYJKoZIhvcNAQEFBQAwGjEYMBYGA1UEAwwPY2EtaW50QGFj\n
\"bWUuY29tMB4XDTE2MDMwNzExNTcyOVoXDTI2MDMwNTExNTcyOVowGjEYMBYGA1UE\n“
\"AwwPc2VydmVyQGFjbWUuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC+\n"
"RI+2JepsS1UuuLNne3sk/1nuLdXsDN/VH1+80tzfijSduFK3c+sg4NNwXsqV3D5Y\n"
"E1Ymi0/fvhRdo7J9yJJNq4ZM42nIgTM5jV9BW8JlE7UHZTUP3YomJcnTjfrsH2U5\n"
"rJPuxvwxJukrDDYqrrS/37Nhrr3UbMUBDETLFGg9BQIDAQABMA0GCSqGSIb3DQEB\n"
"BQUAA4GBACKvFUpVayVWgDGdwZpkr0EgXyifjO36a8IqTA55Bj4/5VLyUt+sCvNz\n"
"6Up64t+akAGPajrDv5IrmwDGYj88fE/vTd1lmCkt8Xi8ODgDhASQYh0lzEQ2nzyU\n"
"L7gyKtPvfZG5BZuf7whrV6y7klGDia9qL4dCmNUbOyRBeJON2DR5\n"
"-----END CERTIFICATE-----"
在FireFox中使用sendkeys输入时,等待很久后提示
此页面的某个脚本可能正忙,或者已停止响应。您可以立即终止该脚本、在调试器中打开该脚本,或者继续等待该脚本完成
在使用chrome sendkeys后,没有提示错误,但耗时很久。
解决思路:
1、查看问题原因:
看看sendkeys实现原理:
def send_keys(self, *value):
"""Simulates typing into the element. :Args:
- value - A string for typing, or setting form fields. For setting
file inputs, this could be a local file path. Use this to send simple key events or to fill out form fields:: form_textfield = driver.find_element_by_name('username')
form_textfield.send_keys("admin") This can also be used to set file inputs. :: file_input = driver.find_element_by_name('profilePic')
file_input.send_keys("path/to/profilepic.gif")
# Generally it's better to wrap the file path in one of the methods
# in os.path to return the actual path to support cross OS testing.
# file_input.send_keys(os.path.abspath("path/to/profilepic.gif")) """
# transfer file to another machine only if remote driver is used
# the same behaviour as for java binding
if self.parent._is_remote:
local_file = self.parent.file_detector.is_local_file(*value)
if local_file is not None:
value = self._upload(local_file) self._execute(Command.SEND_KEYS_TO_ELEMENT, {'value': keys_to_typing(value)})
再看keys_to_typing 可以看出,sendkeys是一个字符一个字符发的,所以在长文本时时间肯定会长,且在firefox中好像还有相关超时限制,这个不得而知了。
既然这样的话,就不用senkeys 来输入文本了。
解决方案二个:
1、使用js来输入
示范代码
js='document.getElementsByTagName("textarea")[0].value="'+lb_cert+"'"
driver.execute_script(js)
因为元素没有id,所以只能用tagName
2、使用复制黏贴方式:
将文本写入粘贴板,然后再发送CTRL+v,快速输入,但需要安装第三方库
至于粘贴板后方法,python里太多库可以支持,这里偷懒,从stackoverflow 拿来一段代码直接使用
import win32clipboard def copy(text):
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardText(text, win32clipboard.CF_UNICODETEXT)
win32clipboard.CloseClipboard()
def paste():
win32clipboard.OpenClipboard()
data = win32clipboard.GetClipboardData(win32clipboard.CF_UNICODETEXT)
win32clipboard.CloseClipboard()
return data text=u"这里写需要粘贴的文字"
copy(text) --放入粘贴板
driver.findElements(By.tagname("textarea")).type(Keys.chord(keys.control, 'v')); ---粘贴
这里,可以根据实际使用不用的方法来实现
web自动化时,sendkeys输入长文本时浏览器响应慢或错误时处理的更多相关文章
- 记:linux服务器启动重启WEB项目启动成功,长时间卡住未响应
		问题 云服务器部署web项目,每次正常启动项目后访问页面很久才能有响应,一直卡在INFO: Deploying web application directory ......长达几分钟以上,极度影响 ... 
- WEB自动化(Python+selenium)的API
		在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家 ... 
- <q>标签,短文本引用;<blockquote>标签,长文本引用
		<q>标签,短文本引用 <q>引用文本</q>,默认显示双引号,不需要在文本中添加 <blockquote>标签,长文本引用 浏览器对<block ... 
- Delphi: TLabel设置EllipsisPosition属性用...显示过长文本时,以Hint显示其全文本
		仍然是处理多语言中碰到问题. Delphi自2006版以后,TLabel有了EllipsisPosition属性,当长文本超过其大小时,显示以...,如下图: 这样虽然解决显示问题,但很显然,不知道. ... 
- 用POI导出excel时,较长的数字不想被自动变为科学计数法的解决方式(转)
		做过很多次导出excel了.都碰到一个问题,内容里如果包含一个比较长的数字,比如订单号“2546541656596”,excel会自动变成科学计数法... 弄过好几次都没有解决,最近又要导出excel ... 
- web自动化页面元素不能键盘输入
		一.背景 web自动化中存在一部分元素属性是readonly属性,导致我们在使用自动化代码的时候无法使用sendkeys()方法传入数据,以12306网站选择出发日期为例,见下图 二.json语句处理 ... 
- 模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A,B,C,D表示,当选某候选人时,直接输入其编号(编号由计算机随机产生,若输入的不是A,B,C,D则视为无效票,选举结束后按得票数从高到底输出候选人编号和所得票数.
		模拟n个人参加选举的过程,并输出选举结果:假设候选人有四人,分别用A,B,C,D表示,当选某候选人时,直接输入其编号(编号由计算机随机产生,若输入的不是A,B,C,D则视为无效票,选举结束后按得票数从 ... 
- 设置Git提交时不用输入用户名和密码
		在用git提交时代码至github上时每次都要输入用户名和密码,当提交操作较为频繁时非常不方便,可以按下文中的介绍,设置成提交时不用输入用户名和密码: 1.在当前库下,已经运行过 git remote ... 
- spa(单页应用)中,使用history模式时,微信长按识别二维码在ios下失效的问题
		spa(单页应用,vue)中,使用history模式时,微信长按识别二维码在ios下失效的问题. 触发条件: spa单页应用: 路由模式 history 从其他页面跳转到带有微信二维码识别的页面(不是 ... 
随机推荐
- 怎么使用ABBYY中的Bates编号
			ABBYY PDF Transformer+ 可让您将 Bates 编号添加到 PDF 文档.Bates 编号可方便文档搜索和检索,并更加有利于电子归档.下面小编给小伙伴们讲讲ABBYY PDF Tr ... 
- 对SQL语句进行过滤的函数
			/// <summary> /// 过滤SQL非法字符串 /// </summary> /// <param name="value">< ... 
- Golang优秀开源项目汇总
			https://blog.csdn.net/hackstoic/article/details/52008307 
- [Arch] 01. Before Design Patterns - UML
			From: 史上最全设计模式导学目录 设计模式,这是软件设计过程中的一个环节. 在这个环节之上,需要overview的事业,就是UML,一种通用的建模语言. Ref: 软件设计之UML—UML的构成[ ... 
- c#POST请求php接口
			POST请求php接口 /// <summary> /// 指定Post地址使用Get 方式获取全部字符串 /// </summary> /// <param name= ... 
- Mac下配置svn服务器
			Mac OS X 系统已经内置了svn支持,所以需要做的就只是配置,可以用svnadmin –vsersion(svnserve –version)查看.希望能对 您配置 SVN.进行开发版本控制有所 ... 
- Tomcat------如何更改被IIS占用的80端口
			1.打开cmd,运行'netstat -ano'发现80端口被pid=4的进程占用 2.打开任务管理器,发现pid=4的进程,其实是system进程,其对应的进程描述是NT kernel & ... 
- ios开发之--理解NSStringDrawingOptions每个选项的用法与意义
			typedef NS_OPTIONS(NSInteger, NSStringDrawingOptions) { NSStringDrawingUsesLineFragmentOrigin = < ... 
- webstorm批量查找,批量替换快捷键
			ctrl+shift+f:批量查找,我的webstorm11不能用ctrl+shift+f进行批量查找了,不知道什么原因,自己又胡乱实验了一下, 发现ctrl+shift+g+f可以批量查找 ctrl ... 
- scala中Map和Tuple
			/** * Created by root * Description : Tuple and Map */ object MapTest { def main(args: Array[String] ... 
