selenium 2.0 常见bug 及改正方法

这周在公司负责将一个项目从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控制看不到而已,这时候如果以为是进入一个新的页面,结果其他页面元素死活无法定位。 

posted @ 2016-07-19 16:19  linchw3  阅读(1179)  评论(0编辑  收藏  举报