问答 在 IE 中做自动化,使用 sendkeys 时,极其特别慢!

dy20082250 · 2017年12月17日 · 最后由 杨腾 回复于 2017年12月20日 · 3810 次阅读

寻求疑惑解答:

最近脚本开始做兼容性测试方面

在 chrome 和 firefox 的最新的几个版本中都没什么问题;

但是在使用 IE 11 时,向页面填充用户名和密码的动作时使用 sendkeys
函数,结果是一个字符一个字符的填充,简单的登陆操作,用了接近一分钟

我不明白为什么?

虽然说 sendkeys 的底层好像确实是这样实现的(记不清楚了),但是在 IE 中脚本以这行方式运行的话也太慢了!

求朋友们的指点。

可惜 testerhome 不能上传视频,否则我就录制一小段传上来了。

后面的是老窗口

前面的是新窗口

从老窗口开出新窗口,居然登陆状态已经不在了。。。。

共收到 17 条回复 时间 点赞

mark 一下

你的问题不要发布这么密集,为了不干扰大家,请发布到问答区

已改

是 webdriver 么。。。我也发现了,32 位驱动在 64 位系统上执行就速度正常,但是 64 位去执行就贼慢,你可以换个 32 位的驱动试下。

杨腾 回复

是 webdriver,那我试试,谢谢!

杨腾 回复

确实是使用 32 为的速度是正常的,再次感谢!

dy20082250 关闭了讨论 12月18日 10:18
dy20082250 重新开启了讨论 12月18日 11:27
杨腾 回复

哥们儿,你切换 driver 后,重新安装了 IE 浏览器为 32 吗?

我发现使用 32 位的驱动能够驱动 64 位的浏览器,但是很容易崩溃!

dy20082250 回复

没碰到这种情况。。。我以前使用 ie11 只是打开链接做个登录而已,可以看下这篇文章里面有没有你要的
在 IE 中运行 SELENIUM WEBDRIVER 脚本

我下午装个 win10 试下

dy20082250 回复

我回来打救你了!写了个 ie11 的百度查询脚本,多点几个控件后果然崩溃了。在 Stack Overflow 上面找到了解决方案,亲试可以,用的是 64 位的处理方案,方法如下,但就是不知道为什么。

32 位 Windows,在注册表编辑器中检查的密钥是 HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BFCACHE。
64 位 Windows,密钥是 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ Internet Explorer \ Main \ FeatureControl \ FEATURE_BFCACHE。
FEATURE_BFCACHE 子项可能存在也可能不存在,如果不存在则需要创建。然后在此项内部,创建一个名为 iexplore.exe 的值为 0 的 DWORD 值

杨腾 回复

哈哈哈哈,认识了大神,工作生活都顺畅了,哈哈哈,谢谢!
我这就去尝试,今天实在是太开心了

杨腾 回复

我们这边测试环境挂了
等我验证了以后再来回复

已关注!

感觉等我做完这个项目以后就能出一个 selenium 和 appium 疑难杂症集锦啦

哈哈哈哈

杨腾 回复

目前稳定下来了

运行还可以

不过遇到了新的问题:
在发布一个动态的时候,会打开一个新的窗口
这种行为在 chrome,firefox 和 IE 中是一样的

不过在 chrome 和 firefox 中是统一在一个大的 window 窗口中显示
而在 IE 中是一个独立的窗口,当然显示的形式无所谓
只是有一个致命的问题:
在 IE 中,切换到新的窗口后,需要我重新登录
即已经建立的 session 和获取的 cookies 都没了,我仅仅是使用 driver.close()
函数关闭了老的窗口,据我所知,driver.quit() 函数才会真的关闭浏览器删除 cookies

再说明一下我所有的脚本在 chrome 和 firefox 中都是正常运行的,包括切换窗口,关闭老的窗口等等
唯有到了 IE,是的在脚本运行时,账号莫名其妙的被弹出了,我目前基本确定,就是切换窗口一起的
虽然不是每次切换窗口都会出现

可以参考一下我最新上传的图片
其实我只是想吐槽一下 IE,真是一步一个坑啊

杨腾 回复

原因已经找到了

是因为我多次强行终止测试脚本的运行
结果任务管理中可以看到有很多个 IEDriverServer 在运行
应该是他们之间发生了串位

我重启了电脑以后这个问题就不存在了

dy20082250 回复

66666

杨腾 回复

哥们,遇到过这种问题没?
在 IE 中,脚本失败的时候,我会对页面进行截图保存操作

public String takeScreenShot(WebDriver driver, String method){
      if (driver == null) {
          return null;
      }
      String imageName = NameUtil.getImageName(method);
      String path = getImagePath(imageName);
      File srcFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
      try {
          FileUtils.copyFile(srcFile, new File(path));
          LogUtil.frameLog("Screen shot be taken: " + path);
      } catch (IOException e) {
          LogUtil.error("Screen shot error: " + path);
      }
      return imageName;
  }

函数如上:

现在我发现一个问题,只要有脚本失败,就会产生一个错误:

[FRAME]  Delete Cookies and Quit
java.lang.IllegalArgumentException: Last unit does not have enough valid bits
    at java.util.Base64$Decoder.decode0(Base64.java:734)
    at java.util.Base64$Decoder.decode(Base64.java:526)
    at java.util.Base64$Decoder.decode(Base64.java:549)
    at org.openqa.selenium.OutputType$2.convertFromBase64Png(OutputType.java:55)
    at org.openqa.selenium.OutputType$2.convertFromBase64Png(OutputType.java:53)
    at org.openqa.selenium.OutputType$3.convertFromBase64Png(OutputType.java:73)
    at org.openqa.selenium.OutputType$3.convertFromBase64Png(OutputType.java:71)
    at org.openqa.selenium.ie.InternetExplorerDriver.getScreenshotAs(InternetExplorerDriver.java:238)
    at com.eisoo.content.report.ScreenShot.takeScreenShot(ScreenShot.java:30)

这个在 firefox 和 chrome 中也是没有遇到过。。。。

我是 ruby watir 党= =,这个报错看得我一头雾水。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册