zoukankan      html  css  js  c++  java
  • 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); 

    搞定。​

  • 相关阅读:
    龙年新作:水印文字添加工具源码摘要
    C语言关键字 浪里白条:goto
    继续聊WPF——自定义命令
    CSS3新的鼠标样式介绍
    C语言深入理解 常量与变量
    XCode 4 不能运行的解决办法
    Runtime专题:详解IOS开发应用之并发Dispatch Queues
    C语言关键字 乱世枭雄:static与extern
    一步步带你做vue后台管理框架(一)——介绍框架
    怎么在谷歌浏览器中安装.crx扩展名的离线Chrome插件?
  • 原文地址:https://www.cnblogs.com/junqiao/p/5656901.html
Copyright © 2011-2022 走看看