selenium框架与chrome浏览器的不兼容问题
在一次偶然的情况下,在chrome上用selenium框架去抓取某个id为XX的页面元素,使用WebDriver的findElement().click()方法进行点击,原来在firefox浏览器运行得好好的程序报错了。编译器给报了InvocationTargetException,有点经验的coder都知道,这个异常范围太广了,并且最蛋疼的是不给出任何异常信息(StacktraceInformation为null)这时候就不得不用getCause方法来得到导致其出现的真正异常,并且得到异常信息,方便我们追踪定位。这个不是本文重点,就不在这里说具体方法了。
之前发现手动点击正常,并且使用isDisplyed和isExists方法确定其没有被其他元素遮挡或者没有来得及加载出来,因此可以排除等待时间不够和被其他元素遮挡的可能性;
查看元素的xpath发现并没有被任何frame或者iframe嵌套,因此也可以排除焦点没有切换到当前待点击元素的可能。
在firefox和IE上可以正常抓取,并且正常进行模拟点击,再结合检视页面的html和js代码,网页代码有bug的可能性也基本可以排除了。
最后定位后追踪到谷歌浏览器的驱动chromedriver上,记得selenium是个开源项目,于是到github上搜这框架。找到驱动部分,果不其然,firefox的驱动还是selenium的人员开发的,而google的驱动却是google内部人员开发的。毕竟不是原班人马搞出来的东西,兼容性不好,有些东西不支持也是正常的,即使是google的工程师也不可能做到十全十美。
既然找到原因就好办了,他俩不兼容那我在chrome上不用那个方法就好。直接调用js的点击事件
WebDriver driver = new ChromeDriver();
JavascriptExecutor jse = (JavascriptExecutor)driver;
- WebElement element = driver.findElement(By.id("XX"));
- jse.executeScript("arguments[0].click();", element);
-
搞定。
selenium框架与chrome浏览器的不兼容问题的更多相关文章
- selenium webdriver启动Chrome浏览器后无法输入网址的解决办法
通过selenium webdriver启动Chrome浏览器,脚本如下: from selenium import webdriver browser = webdriver.Chrome() br ...
- selenium webdriver 使用Chrome 浏览器
首先需要有ChromeDriver驱动来协助.ChromeDriver是实现WebDriver有线协议的一个单独的服务.ChromeDriver通过chrome的自动代理框架控制浏览器,ChromeD ...
- 关于页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
需求 最近在做博客的目录功能,发现一个在现代浏览器间的一个bug,或是称之为差异,即页面滚动值(scrollTop)的获取与设定. 在此之前先说一下关于页面元素的坐标获取,这张图的经典性不必再提. 实 ...
- python3.6中使用selenium + chromedriver访问Chrome浏览器时报错
from selenium import webdriver from selenium.webdriver.chrome.options import Options if __name__ == ...
- jenkins里跑selenium webdriver,Chrome浏览器不能打开&&unknown error: unable to discover open pages
在windows的cmd里面执行 “python test.py”,毫无问题,浏览器正常打开,测试结果也正常. 问题: 但如果是在jenkins里,选择 “execute windows batch ...
- java selenium手动最大化chrome浏览器的方法
package my_automation; import java.awt.Dimension; import org.openqa.selenium.Capabilities; import or ...
- Selenium+Python调Chrome浏览器时报Traceback (most recent call last): File "C:/Users/EDZ/Desktop/selenium_demo/demo001.py", line 12, in <module>
上次使用Selenium+Python还是好几个月前了 今天想再用一下,结果写个打开网站的小demo报错,报错如下: 检查了一下,查看报错日志,应该是chrome版本和driver版本不一致导致的. ...
- iframe框架在IE浏览器,360兼容浏览器下将白色背景设为透明色
<IFRAME ID="Frame1" SRC="transparentBody.htm"></IFRAME> iframe在大部分浏览 ...
- Selenium webdriver 操作chrome 浏览器
Step1: 下载chromedriver. 下载路径: http://chromedriver.storage.googleapis.com/index.html 选择一个合适的下载即可.我下载的是 ...
随机推荐
- NOIP前刷水行动
2016.11.15 BZOJ1009:DP+矩阵乘法+KMP BZOJ1898:矩阵乘法 BZOJ4101:贪心,考虑我们往右边撞的时候,我们会向左边冲 ,于是枚举答案点利用一个指针计算即可! 20 ...
- UVa 10382 - Watering Grass
题目大意:有一条长为l,宽为w的草坪,在草坪上有n个洒水器,给出洒水器的位置和洒水半径,求能浇灌全部草坪范围的洒水器的最小个数. 经典贪心问题:区间覆盖.用计算几何对洒水器的覆盖范围简单处理一下即可得 ...
- spark 中的RDD编程 -以下基于Java api
1.RDD介绍: RDD,弹性分布式数据集,即分布式的元素集合.在spark中,对所有数据的操作不外乎是创建RDD.转化已有的RDD以及调用RDD操作进行求值.在这一切的背后,Spark会自动 ...
- xdebug.var_display_max_data
Xdebug Display Full Details on var_dump() Xdebug is an excellent addition to a PHP developers arsena ...
- js 验证文本框只能输入数字和小数点
第一步.添加js方法 function check(e) { var re = /^\d+(?=\.{0,1}\d+$|$)/ if (e.value != "") ...
- YII 1.0 缓存使用
在main.php的组件components中配置设置添加缓存 'cache'=>array( 'class' => 'system.caching.CFileCache' ), 也就是f ...
- java_web学习(12)JDBC
数据持久化 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的 ...
- HBuilder开发App教程04-最难搞定的是mui
前言 前几篇说到一些HBuilder开发app的基础教程, 现在来说一下HBuilder开发app的难点,或者说是上手的难点, 就是mui, 如果你没有研究mui就贸然的上手HBuilder,那你的开 ...
- 解决xtrabackup command not found no mysqld group 问题
现象:手动执行xtrabackup没问题,环境变量检查过也没问题.放到执行计划中 会报错: sh: xtrabackup_56: command not found innobackupex: Err ...
- NamingException with message: Name [spring.liveBeansView.mbeanDomain]
spring mvc启动出现 NamingException with message: Name [spring.liveBeansView.mbeanDomain],解决方式: 在web.xml中 ...