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); 

    搞定。​

  • 相关阅读:
    json的相关知识
    实现highcharts放大缩小
    js总结
    sql语句学习
    关于echarts生成雷达图的一些参数介绍
    在表单导航中如何判断其进行到第几步
    IDEA的相关使用-----快捷键
    简单安装squid步骤
    feign调用文件上传服务,传参MultipartFile
    java.lang.IllegalStateException: Failed to load property source from location 'classpath:/application.yml'
  • 原文地址:https://www.cnblogs.com/junqiao/p/5656901.html
Copyright © 2011-2022 走看看