9.使用CSS选择器定位元素
使用CSS选择器定位元素相对Xpath更可靠更快速定位复杂的元素。
9.1使用绝对路径来定位元素(使用绝对路径时每个元素之间要有一个空格)
WebElement userName =
driver.findElement(By.cssSelector(“html body div div form. input”))
9.2使用相对路径来定位元素
WebElement userName = driver.findElement(By.cssSelector(“input”));
---使用相对路径+class属性值来定位元素
先指定HTML标签,然后加一个“.”符号,跟上Class属性的值(此方法与className()类似)
WebElement loginButton = driver.findElement(By.cssSelector(“input.login”))
9.3使用相对ID选择器来定位元素
先指定HTML标签,然后加上一个“#”,跟上id的属性值(或省略HTML标签,直接输入“#”符号,更上id即可)
WebElement userName = driver.findElement(By.cssSelector(“input#username”));
这就爱那个返回input标签中id为username的元素。
这个方法和id选择器策略类似。
9.4使用属性来定位元素
CSS选择器也可以使用其他的元素属性来定位
WebElement userName = driver.findElement(By.cssSelector(“input[name=username]”));
WebElement btn = driver.findElement(By.cssSelector(“img[alt=’Previous’]”))
当一个属性不足以定位到一个元素时,可联合使用其他属性
WebElement btn2 = driver.findElement(By.cssSelector(“input[type=’submit’][value=’Login’]”))
9.5使用属性名称选择器来定位元素
只通过指定元素中属性的名称而不是属性的值来定位元素。
例如:查找所有<img>标签中,含有alt属性的元素。
List<WebElement> imagesWithAlt =
driver.findElement(By.cssSelector(“img[alt]”))
Not()伪类用来匹配不满足规则的元素,例如定位那些<img>标签中不含有alt属性的
List<WebElement> imagesWithAlt =
driver.findElement(By.cssSelector(“img:not([alt])”)
9.6部分属性值的匹配
CSS选择器提供了一个部分属性值匹配定位元素的方法,这为了测试哪些页面上具有动态变化的属性的元素是非常有用的。例如,元素id是动态生成的。
^= 首部匹配 Input[id^=’ctrl’] 将匹配到id以Ctrl开头的元素
$= 尾部匹配 input[id$=’_user] 将匹配到Id以_user结尾的元素
*= 包含 input[id*=’user’] 将匹配到id包含user的元素
10.使用XPath定位元素
利用Xpath来定位元素非常方便,但是辩解的定位策略牺牲了系统的性能。
Xpath和CSS重要的区别在于Xpath可以向前和向后查询DOM结构的元素,而CSS只能向后查询。这意味着使用Xpath可以通过子元素来定位父元素。
10.1通过绝对路径定位元素
WebElement userName = driver.findElement(By.xpath(“html/body/div/form/input”));
10.2通过相对路径定位元素
WebElement userName = driver.findElement(By.xpath(“//input”));
10.3使用索引来定位元素
当通过标签匹配会匹配多个元素时,可指定元素的索引来找到他。
WebElement pwd = driver.findElement(By.xpath(“//input[2]”));
10.4使用Xpath及属性值定位元素
WebElement userName =
driver.findElement(By.xpath(“//input[@id=’username’]”));
一个属性不足以定位元素,需联合使用多个属性来达到精确匹配。
WebElement
previousButton = driver.findElement(By.xpath(“//input[@type=’submit’][@value=’Login’]”))
或使用and操作符
WebElement
previousButton = driver.findElement(By.xpath(“//input[@type=’submit’ and @value=’Login’]”))
使用or操作如,任何一个属性满足就可以对元素进行定位
WebElement previousButton =
driver.findElement(By.xpath(“//input[@type=’submit’ or @value=’Login’]”));
10.5使用Xpath及属性名称定位元素
List<WebElement> imagesWithAlt =
driver.findElements(By.xpath(“img[@alt]”));
10.6部分属性值的匹配
Starts-with() input[starts-with(@id,
‘ctrl’)] 以**开头
Ends-with() input[ends-with(@id,
‘_user’)] 以**结尾
Contains() input[contains(@id,
‘user’)] 包含**
10.7使用值来匹配任意属性及元素
Xpath可以匹配任意元素属性中指定的值
WebElement userName = driver.findElement(By.xpath(“//input[@*=’username’]”));
查找所有Input元素中是否有属性等于username的。
10.8使用Xpath轴来定位元素
11.使用文本元素
11.1使用CSS选择器伪类定位元素
WebElement
cell = driver.findElement(By.cssSelector(“td:contains(‘Item1’)”));
注:contains()方法已经被CSS3弃用了
11.2使用Xpath的text函数
Text()方法来定位指定文本的元素
WebElement cell =
driver.findElement(By.xpath(“//td[contains(text(),’item1’)]”));
这里contains()与text()函数一起使用。Text()函数返回完整文本,contains()函数将检查是否包含此文本。
11.3使用Xpath精确文本定位元素。
WebElement cell =
driver.findElement(By.xpath(“//td[.=’Item’]”))
12.使用高级的CSS选择器定位元素
12.1查询子元素
伪类 | 例子 | 描述 |
:first-child | Form#loginForm.:first-child | 定位表单里第一个子元素username标签 |
:last-child | Form#loginForm.:last-child | 定位表单最优一个子元素login按钮 |
:nth-child | Form#loginForm.:nth-child(2) | 定位表单中第二个子元素username的输入框 |
12.2查询兄弟元素
利用CSS选择器,我们可以使用“+”操作符来定位兄弟元素。
WebElement web = driver.findElement(By.cssSelector(“#nv
a + b”))
#nv a定位到“新闻”链接,“+ b”后就找到其兄弟<b>元素
12.3使用用户操作伪类
使用用户的操作行为:focus伪类,定位焦点在input框中的元素
WebElement product = driver.findElement(By.cssSelector(“input:focus”));
12.4使用UI状态伪类
如:enable,disable,checked
伪类 | 例子 | 描述 |
:enable | Input:enable | 定位所有属性为enable的input的元素 |
:disable | Input:disable | 定位所有属性为disable的input的元素 |
:checked | Input:checked | 定位所有多选框属性为checked的元素 |
13.使用jQuery选择器
jQuery