project: blog
target: how-to-resolve-cannot-find-function-addEventListener-error-in-selenium.md
status: publish
date: 2016-04-28
update: 2016-04-28
tags:
- Selenium
- Java
- JavaScript
- HTMLUnit
categories:
- Selenium

今天遇到一个很坑爹的问题,某Selenium自动化用例老是失败,报错如下:

1) App\Tests\***********
Facebook\WebDriver\Exception\UnknownServerException: TypeError: Cannot find function addEventListener in object [object HTMLDocument]. (http://**********/*)
Failed to take screen-shot: org.openqa.selenium.htmlunit.HtmlUnitDriver cannot be cast to org.openqa.selenium.TakesScreenshot

Google了下这个错误,发现暂时没有适合我的解决方案:

  1. 有的方案建议换firefox来测试 -- 可是我们的这个自动化用例是要跑在一台linux服务器上,装firefox不现实
  2. 有点方案建议禁用js -- 可是现在这个页面越来越复杂,js禁用的话就侧不起来了,没意义
  3. 有点方案建议换PhantomJs -- 这个PhantomJs确实不会报这个错误,以前也用过,但是PhantomJs速度太慢,也是坑

怎么办呢?本来想到HtmlUnit的官方网站上反馈这个bug,结果一搜,已经有人反馈过这个bug了: https://sourceforge.net/p/htmlunit/bugs/1536/. 这个状态为closed,说明已经解决了!

那为啥还报这个错误呢?怀疑是Selenium引用的HtmlUnit版本太低导致的。我使用的Seleniumselenium-server-standalone-2.52.0.jar, 目前最新版本的Selenium2.53.0,然而不能升级到2.53.0,因为2.53.0中没有自带HtmlUnit.

咋办呢?幸好懂那么一丢丢Java —— 下载个HtmlUnit的最新版本,然后重新打包selenium-server-standalone-2.52.0.jar我是不会啦,不过可以指定下classloader的加载路径:

java -Djava.ext.dirs=./lib -jar selenium-server-standalone-2.52.0.jar

./lib就是放HtmlUnit的一堆jar文件的目录。这样子classloader加载HtmlUnit的类的时候就会使用./lib里面的了,就不会使用selenium-server-standalone-2.52.0.jar中的老版本中的了。

以此配置重新启动下Selenium的服务,然后再运行对应的测试用例,果然一切OK了。

完事,收工~

如何解决Selenium中"Cannot find function addEventListener in object [object HTMLDocument]"的错误的更多相关文章

  1. 解决IIS中部署WCF时,访问.svc文件的404错误问题

    如果你直接在IIS 7中配置WCF,访问.svc文件时会出现404错误.解决方法,以管理员身份进入命令行模式,运行:"%windir%\Microsoft.NET\Framework\v3. ...

  2. 解决JS中missing ( before function parameters的错误

    在编写javascript中,常出现在function处提示“missing ( before function parameters”的错误,这是怎么回事? 例如: function String. ...

  3. UI自动化时,解决selenium中无法点击Element:ElementClickInterceptedException

    在跑自动化时,页面上有2个下拉框,两个下拉框无论屏蔽哪一段都会成功,但是同时放开跑时会报错,百度给的解释是上面的下拉框元素覆盖了下面下拉框的元素定位,才会导致报错 百度的解决办法有2种: elemen ...

  4. Android开发-解决 AIDL 中找不到couldn't find import for class错误

    最近在使用AIDL做IPC的时候,在处理复杂的数据类型的时候,编译器总是报couldn't find import for class错误,所以在这里总结下AIDL使用的时候的一些注意事项,希望对你能 ...

  5. 解决C#中调用WCF方法报错:远程服务器返回错误 (404) 未找到

    IIS配置问题,解决方法: 1. 首先添加MIME类型 扩展名“.svc”,MIME类型 “application/octet-stream” 2.处理程序映射--添加托管处理程序 请求路径 “.sv ...

  6. 使用call、apply和bind解决js中烦人的this,事件绑定时的this和传参问题

    1.什么是this 在JavaScript中this可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式,this 绑定的对象即函数执行的上下文环境(context). 为了帮助理解,让我 ...

  7. 在 Selenium 中让 PhantomJS 执行它的 API

    from selenium import webdriver driver = webdriver.PhantomJS() script = "var page = this; page.o ...

  8. Selenium中的几种等待方式,需特别注意implicitlyWait的用法

    摘:http://blog.csdn.net/pf20050904/article/details/20052485 最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题 ...

  9. Jquery中使用setInterval和setTimeout会提示缺少对象的错误,解决方法如下:

    直接在ready中调用其他方法,会提示缺少对象的错误,解决方法如下: 方法1. 应用jQuery的扩展可以解决这个问题. $(document).ready(function(){ $.extend( ...

随机推荐

  1. 关于启用 HTTPS 的一些经验分享(二)

    转载: 关于启用 HTTPS 的一些经验分享(二) 几天前,一位朋友问我:都说推荐用 Qualys SSL Labs 这个工具测试 SSL 安全性,为什么有些安全实力很强的大厂家评分也很低?我认为这个 ...

  2. iedriverserver使用报错

    在win7下面使用IEdriverserver报错:   AttributeError: 'Service' object has no attribute 'process'   1,下载最新的ie ...

  3. VMware中linux配置2-安装jdk

    1.通过共享文件夹,将文件jdk-7u79-linux-x64.tar.gz 复制到/tmp目录下 cp jdk-7u79-linux-x64.tar.gz /tmp 2.解压该文件 tar -zxv ...

  4. Jquery动态操作checkbox

    问题的由来:html页面中使用checkbox给新建用户授权,然后提交到后台服务器,完成给用户授权.用户授权完成之后,如果用户的权限发生改变管理员需要修改多个用户的权限或查看某用户的权限,点击不同的用 ...

  5. JavaScipt 数据交互

    标准的w3c直接提供了XMLHttpRequest方法,我们主要站在设计的角度来理解,如何设计出低耦合高内聚的代码jquery对Ajax的处理主要体现在对浏览器兼容,数据的处理过滤以及各种事件的封装上 ...

  6. JAVA RMI 实例

    下面我将介绍一个完整的实例,让初学者能快速体验RMI的功用. 分为以下四个步骤 1. 创建远程接口及声明远程方法(HelloInterface.java)2. 实现远程接口及远程方法(继承Unicas ...

  7. 在为ListView设置adapter时出错

    为listView设置adapter,代码如下: SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems, R.layout.m ...

  8. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

  9. Android6.0中的权限

    Android6.0相比之前的Android版本有一个很大的不同点,就是动态的获取权限.之前我们需要什么权限只需要在Manifest文件中声明即可,在6.0中,又新增了运行时权限的动态检测. Andr ...

  10. pthreads 2.0.10 test

    CentOS 6.3 cd /root mkdir pthreads //get php-5.6 and install zts version wget cn2.php.net/get/php-5. ...