已经存在webdriver实例化的对象
WebDriver driver=new FirefoxDriver();
1. By.name()
通过元素的name属性查找,但是如果元素较多的话,定位困难,尤其存在多个相同的name属性的时候
dr.findElement(By.name("name")).clear();
2.By.id()
通过元素的id属性命名,一般来说id比name精确,一般来说一个页面内id值都不会同名
dr.findElement(By.id("password")).sendKeys(pwd);
3.By.className()
通过元素的类名查找,一般页面中,多个元素都可能属于同一个class类,也有一个元素属于多个class类的情况,使用不是很多
4.By.tagName()
通过元素的标签名查找,一般用的少,一般一个页面有多个标签、标签,一般会查找个多个元素,但是可以通过list 去接收,然后循环foreach循环找到需要的元素,如下
public voidce() {
dr=newFirefoxDriver();
dr.get("http://crm.cloud.5kcrm.com/");
WebElement tg1= null;
List tagnames= dr.findElements(By.tagName("input"));for(WebElement tg:tagnames){if(tg.getAttribute("name").equals("password")){
tg1=tg;break;
}
}
System.out.println(tg1.getTagName().toString());
}
5. By.linkText()
通过标签链接的内容进行查找
如html中
组织架构
那么这样写
dr.findElement(By.linkText("组织架构")).click();
6. By.partialLinkText()
是linktest进一部的简化使用,标签内容的局部匹配
如html中
组织架构
那么这样写
dr.findElement(By.partiallinkText("组织")).click();
7. By.xpath()
强大的匹配工具,主要通过位置来匹配,有相对位置和绝对位置,如下:
dr.findElement(By.xpath(".//*[@id='popOverBox']/input[2]")).click();//相对位置
dr.findElement(By.xpath("html/body/div[9]/div[2]/form/div[1]/div/input")).sendKeys("测试部门");//绝对位置
(1)匹配属性
dr.findElement(By.xpath(“//a[contains(@href, 'ces')]”));//href中包含'ces'的a的标签
(2)匹配字符
dr.findElement(By.xpath("//a[contains(text(),'办')]"));//匹配a标签中包含“办”的文字如办公室
(3)匹配兄弟元素、父元素等等
可以参照w3school中的轴的使用
8. By.cssSelector()
通过css的选择器进行元素的查找
html中的css选择器使用方式如下
ID选择器:
#idName{}样式唯一;
类选择器:
.className{}样式共用;
标签选择器
html自带的标签;
优先级:ID>类>标签选择器
.name a{}
name类下的a标签进行样式修改
a,p{}
a、p两种标签样式同时修改
但是cssSelector中的递进关系是用【>】进行的,css选择器择是用空格进行的递进关系
dr.findElement(By.cssSelector(".controls>textarea[name='description']")).sendKeys("测试测试");
//这里.controls表示class名为controls;textarea表示标签名,name表示textarea中的属性名