如何解决Selenium中"Cannot find function addEventListener in object [object HTMLDocument]"的错误
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了下这个错误,发现暂时没有适合我的解决方案:
- 有的方案建议换firefox来测试 -- 可是我们的这个自动化用例是要跑在一台linux服务器上,装firefox不现实
- 有点方案建议禁用js -- 可是现在这个页面越来越复杂,js禁用的话就侧不起来了,没意义
- 有点方案建议换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]"的错误的更多相关文章
- 解决IIS中部署WCF时,访问.svc文件的404错误问题
如果你直接在IIS 7中配置WCF,访问.svc文件时会出现404错误.解决方法,以管理员身份进入命令行模式,运行:"%windir%\Microsoft.NET\Framework\v3. ...
- 解决JS中missing ( before function parameters的错误
在编写javascript中,常出现在function处提示“missing ( before function parameters”的错误,这是怎么回事? 例如: function String. ...
- UI自动化时,解决selenium中无法点击Element:ElementClickInterceptedException
在跑自动化时,页面上有2个下拉框,两个下拉框无论屏蔽哪一段都会成功,但是同时放开跑时会报错,百度给的解释是上面的下拉框元素覆盖了下面下拉框的元素定位,才会导致报错 百度的解决办法有2种: elemen ...
- Android开发-解决 AIDL 中找不到couldn't find import for class错误
最近在使用AIDL做IPC的时候,在处理复杂的数据类型的时候,编译器总是报couldn't find import for class错误,所以在这里总结下AIDL使用的时候的一些注意事项,希望对你能 ...
- 解决C#中调用WCF方法报错:远程服务器返回错误 (404) 未找到
IIS配置问题,解决方法: 1. 首先添加MIME类型 扩展名“.svc”,MIME类型 “application/octet-stream” 2.处理程序映射--添加托管处理程序 请求路径 “.sv ...
- 使用call、apply和bind解决js中烦人的this,事件绑定时的this和传参问题
1.什么是this 在JavaScript中this可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式,this 绑定的对象即函数执行的上下文环境(context). 为了帮助理解,让我 ...
- 在 Selenium 中让 PhantomJS 执行它的 API
from selenium import webdriver driver = webdriver.PhantomJS() script = "var page = this; page.o ...
- Selenium中的几种等待方式,需特别注意implicitlyWait的用法
摘:http://blog.csdn.net/pf20050904/article/details/20052485 最近在项目过程中使用selenium 判断元素是否存在的时候 遇到一个很坑爹的问题 ...
- Jquery中使用setInterval和setTimeout会提示缺少对象的错误,解决方法如下:
直接在ready中调用其他方法,会提示缺少对象的错误,解决方法如下: 方法1. 应用jQuery的扩展可以解决这个问题. $(document).ready(function(){ $.extend( ...
随机推荐
- js 同for一样效果 (延迟)每秒循环一次 追加
<script type="text/javascript"> var j = 1; var timeID = null; function ...
- 实现标记datagridview标题并导出Excel的功能
最近在学习winform,国庆前被布置了一个小任务,好不容易大致做出来了,决定记录下来,以此加深印象. 先说下需求:这是一个导入话单标记后并导出的功能 1. 选择excel文件 2. 定义字段 日 ...
- Unity3D 中的3种坐标系
Unity3D Script API : Camera 若干文章: 1.Screen VS Viewport What is the difference 2.Screen,Viewport有什麽區別 ...
- mysql 存储 emoji报错( Incorrect string value: '\xF0\x9F\x98\x84\xF0\x9F)的解决方案
1.报错原因: mysql utf-8 编码储存的是 2-3个的字节,而emoji则是4个字节. 2.解决办法: 修改mysql的配置文件,windows下的为my.ini(linux下的为my.cn ...
- C# 利用占位符替换word中的字符串和添加图片
利用占位符替换word中的字符串和添加图片 ///<summary> /// 替换word模板文件内容,包括表格中内容 /// 调用如下:WordStr ...
- MYSQL获取自增ID的四种方法
MYSQL获取自增ID的四种方法 1. select max(id) from tablename 2.SELECT LAST_INSERT_ID() 函数 LAST_INSERT_ID 是与tabl ...
- springMVC中实现servlet依赖注入
记录一下开发过程中遇到的问题: 首先看一下这个帖子: http://blog.csdn.net/gaogaoshan/article/details/23540129 由于我使用的是springMVC ...
- Eclipse中10个最有用的快捷键组合
Eclipse中10个最有用的快捷键组合 (转) 一个Eclipse骨灰级开发者总结了他认为最有用但又不太为人所知的快捷键组合.通过这些组合可以更加容易的浏览源代码,使得整体的开发效率和质量得到提升. ...
- Coding源码学习第四部分(Masonry介绍与使用(三))
接上篇继续进行Masonry 的学习. (12)tableViewCell 布局 #import "TableViewController.h" #import "Tes ...
- 如何解决前端传来的时间格式与mysql表中时间格式不匹配的查询问题
前端传过来的时间格式为“2016-07-11 11:13:10”,而数据表中对应字段`add_time`的格式为“2016-7-11”,此时sql不能直接用 "where `add_time ...