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版本太低导致的。我使用的Selenium是selenium-server-standalone-2.52.0.jar, 目前最新版本的Selenium是2.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. Numpy Study 1

    Numpy 使用1 1.Numpy创建数组 import numpy as np 创建数组有以下方式: (1).arange numpy.arange([start, ]stop, [step, ]d ...

  2. jenkins添加git源码目录时报Error performing command错误

    简介 这是我在构建一个自动化部署项目中遇到的一个异常 解决步骤: 1.进入的jenkins的home目录,执行下面命令生成公钥和私钥 [root@jacky .jenkins]# ssh-keygen ...

  3. 使用Jmeter进行HTTP接口测试

    这几天学习了一下使用Jmeter进行HTTP接口测试,这个也是后面进行性能测试的基础吧 安装运行请自行搜索,下载地址:http://jmeter.apache.org/download_jmeter. ...

  4. Java中的方法应用

    一.如何定义java中的方法 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. 语法: 1. 访问修饰符:方法允许被访问的权限范围, 可以是 public.protected.priv ...

  5. 数字图像处理作业使用OpenCV - 自定义直方图

    第二次作业需要打印出来灰度直方图,当然不能使用ocv的自带calcHist函数来得到Mat对象了……结果上网搜索怎么用自己的数据创建直方图,搜到的都是直接用函数的_(:з」∠)_ 结果这个地方拖了好久 ...

  6. SQLServer解析xml到Oracle

    写了一个程序:根据状态位读取SQLserver 中的一张表,下载其中一个字段的值,这个值是XML类型的,然后把这个XML文件的内容插入到另一Oracle数据库,并更新SQLServer表的标志位,表示 ...

  7. JAVA字符串05之课程问题解决

    (一)古罗马皇帝凯撒在打仗时曾经使用过以下方法加密军事情报:请编写一个程序,使用上述算法加密或解密用户输入的英文字串. 1.设计思想:首先选择是加密字符串还是解密字符串,两种算法相似.如果要加密字符串 ...

  8. APACHE 在windows下的配置

    目前apache在windows下只支持到2.2 所以php必须下载相应的线程安全的 然后打开apache的配置页面 listen directory 和 load_module修改 httpd -k ...

  9. JavaScipt 样式操作

    我们知道HTML样式定义的三种方式: <link/>外部引入也就是定义 CSS 中的 <style/>嵌入式样式 style特性地定义 给一个HTML元素设置css属性,如: ...

  10. js字符串和正则表达式中的match、replace、exec等的配合使用

    正则并不是经常使用,而正则和字符串之间的函数关系又错综复杂,谁是谁的函数,又是怎么样的一种结果,往往我们是看一遍忘一遍,对此我是头疼不已,感觉自己是个笨蛋^_^. 为了以后不再查文档,特此把常用的函数 ...