Selenium 2.0 常见bug 及改正方法

发表于:2016-8-04 11:32

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:linchw3    来源:51Testing软件测试网采编

  这周在公司负责将一个项目从selenium 1.0 换成 selenium 2.0,结果在修改的过程中,一堆问题。折腾了好几天,部分问题总结如下:
  1. java.lang.NoClassDefFoundError:....   该错误指出了依赖的缺失,具体是什么依赖见Error后面的部分,因为1.0 和 2.0所依赖的包有区别,如果是使用maven,可能要进行修改,具体可以看缺失哪个包,然后直接百度,然后上 http://mvnrepository.com/ 上面去找包,然后将依赖补充到pom.xml里面就好,比如  java.lang.NoClassDefFoundError: org/apache/http/conn/HttpClientConnectionManager",查了谷歌,发现缺失或者需要更新的是httpclient,那么去刚刚的仓库里面找这个文件,找到合适的版本,将相关依赖代码copy到pom里面即可,如下
  2. org.openqa.selenium.WebDriverException: Target URL ... is not well-formed.在可以运行的时候可能无法打开页面出现这个错误,这个是因为你地址没有写好,譬如忘了写http://。举个例子,我是org.openqa.selenium.WebDriverException: Target URL www.gmail.com is not well-formed., 结果发现是应该写https://www.gmail.com.然后就好了
  3.id 变化导致selenium无法正确定位的问题,由于使用脚本,有些元素的ID可能是动态的,所以你每一次操作看到的id都是不同的,如果使用某一次的ID作为定位的标准,肯定是无法定位到元素的。此时比较好的做法有两个:1.使用其他第一无二的元素,2.使用xpath,可以先定位到父节点,利用DOM树解决。比如下面的例子
  iframe的ID是动态的,可是又没有其他的唯一标识,所以定位这个元素的方法是先定位她的父节点,然后定位这个frame。xpath如下://*[@id="urs-login"]/iframe
  4. 点击速度太快,这种经常一个元素还没有出来就已经开始各种下一步操作,这样子很容易导致定位失败或者其他错误,所以最好每次都给一点页面加载时间,可以通过thread.wait(x ms)来实现,可以暂停x毫秒
  5. iframe:这个是新手最容易失手的地方。像上图,如果我想定位iframe里面的东西,我就必须进入这个iframe先,可以使用这行代码进入:driver.switchTo().frame(driver.findElement(By.xpath(...)));当然不一定要用xpath,可以用id什么的。然后退出使用driver.switchTo().defaultContent();
  6. 记得从iframe出来!!之前的代码里面有一个页面进入iframe登录之后还是在同一个页面,只是登陆部分通过js控制看不到而已,这时候如果以为是进入一个新的页面,结果其他页面元素死活无法定位。 
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号