简单对象的定位
对象的定位是自动化测试的核心,要想操作一个对象,首先应该识别这个对象。一个对象会有各种的(属性),我们可以通过这个属性找到这对象,查看方式可通过各种浏览器。
Firefox:右键-使用firebug查看元素
Chrom:右键-审查元素
webdriver提供了一系列的对象定位方法,常用的有以下几种
· id
· name
· class name
· link text
· partial link text
· tag name
· xpath
· css selector
例如:WebElement username=driver.findElement(By.id(“username”));
相关方法网上资料很多,这里记录下练习过程中遇到的错误。
1.提示“Sytax error,insert “...VariableDeclaratorID”to complete FormalParameterList”
解决方法:没有添加main函数,加上即可
2.运行脚本时run as无Java Application选项
解决方法:同问题1,缺少main函数,在要运行的项目中选择一个类,添加一个主函数即可。
public static void main(String[] args) {
}
3.定位元素的xpath正确,却一直提示找不到元素(采用多个frame时)
解决方法:使用selenium IDE录制步骤发现,中间过程有切换到另外的frame,所以导致一直定位不到元素,需要切换到当前frame,找到当前frame的元素属性
4.定位元素的xpath正确,却一直提示找不到元素(没有切换frame时)图中第54行
解决方法:试了各种定位方法,改成css path后成功
5.登录按键刚开始使用的定位方法是by.id,提示“Session not found”
解决方法:使用selenium IDE录制步骤,获取录制的元素属性,对应改成by.xpath成功找到元素
6.提示“java.lang.IllegalMonitorStateException”
解决方法:将wait(5)改成Thread.sleep(50000);运行正常
该异常会在三种情况下抛出:
1>当前线程不含有当前对象的锁资源的时候,调用obj.wait()方法;
2>当前线程不含有当前对象的锁资源的时候,调用obj.notify()方法。
3>当前线程不含有当前对象的锁资源的时候,调用obj.notifyAll()方法。
7.使用List<WebElement>rows 时,总是提示“the type List is not generic:it cannot be parameterized with arguments<WebElement>”
解决方法:提示需导入List时选错错误,正确应导入import java.util.*;
总结:
l 对象定位首先从id,name,class属性入手
l 注意观察选择元素中间是否有切换frame,并且切换到子frame后要记得切换回来;
l 如果该元素只有一个属性,并且有多个元素都采用同一个属性值,则用xpath,css属性定位;
l 以上实验后如还是提示找不到该元素,则配合使用selenium IDE,录制该元素,获取该元素的属性值(by.xpath)。基本上就可以解决大部分的元素定位问题。