我们先了解一下Xpath基础语法,如下:
符号 | 含义 | 举例 |
---|---|---|
/ | 从根节点选取。 | /bookstore——选取根元素 bookstore。 |
// | 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 | //book——选取所有 book 子元素,而不管它们在文档中的位置。 |
. | 选取当前节点。 | |
.. | 选取当前节点的父节点。 | |
@ | 选取属性 | //@lang——选取名为 lang 的所有属性。 |
xpath常用函数:
函数名 | 举例 | 用途 |
---|---|---|
contains () | //div[contains(@id,'widget')] | 选择id属性中包含'widget'的div |
text() | //a[text()='hello world'] | 选择文本值为'hello world'的节点 |
last() | 选择最后一个 | |
starts-with() | //div[starts-with(@id,'common')] | 选择id属性中’common’开头的div节点 |
not() | 否定 |
一.Xpath的定位方法(复制路径的定位经常会经常不到的,建议还是手写吧)
1.通过绝对路径做定位(不推荐使用!)
WebElement ele = driver.findElement(By.xpath("html/body/div/form/input"));
2.第2种方法:通过元素索引定位
WebElement ele = driver.findElement(By.xpath("//input[4]"));
例:
3.使用xpath属性定位
1)By.xpath("//input[@id='kw']")
2)By.xpath("//input[@class="next_btn" and @value="next" ]")
3)By.xpath("//input[@type='radio' or @name='select[]']")
4.使用部分属性值匹配(最强大的方法)
WebElement ele = driver.findElement(By.xpath("//input[start-with(@id,'fuck')]"))——匹配id以fuck开头的元素,id='fuckyou'
WebElement ele = driver.findElement(By.xpath("//input[ends-with(@id,'fuck')]"))——匹配id以fuck结尾的元素,id='youfuck'
WebElement ele = driver.findElement(By.xpath("//input[contains(@id,'fuck')]"))——匹配id中含有fuck的元素,id='youfuckyou'
5.使用任意值来匹配属性及元素
WebElement ele = driver.findElement(By.xpath("//input[@*='fuck']"))——匹配所有input元素中含有属性的值为fuck的元素
6.使用XPATH轴来定位元素
还没怎么用过,就去借用他人的吧:插入# 笑笑唔莱的 使用xpath的轴(Axis)进行元素定位
注:元素定位总结(java版)
//By id
WebElement ele = driver.findElement(By.id());
//By Name
WebElement ele = driver.findElement(By.id());
//By className
WebElement ele = driver.findElement(By.className());
//By tabName
WebElement ele = driver.findElement(By.tagName());
//By linkText
WebElement ele = driver.findElement(By.linkText());
//By partialLinkText
WebElement ele = driver.findElement(By.partialLinkText());//通过部分文本定位连接
//By cssSelector
WebElement ele = driver.findElement(By.cssSelector());
//By XPATH
WebElement ele = driver.findElement(By.xpath());
二.selenium用javascript定位
由于selenium的内核引擎就是用JavaScript来驱动的,所以只要selenium自带的那些原始辣鸡方法出现定位不了的、点击不了的并发症一旦发作,就可以使用JavaScript大绝招,除了JavaScript,还有jQuery大绝招。
以下总结了5种js定位的方法:
1.通过id获取
document.getElementById(“id”)
2.通过name获取
document.getElementsByName(“Name”)
返回的是list
3.通过标签名选取元素
document.getElementsByTagName(“tag”)
4.通过CLASS类选取元素
document.getElementsByClassName(“class”)
兼容性:IE8及其以下版本的浏览器未实现getElementsByClassName方法
5.通过CSS选择器选取元素
document.querySelectorAll(“css selector")
兼容性:IE8及其以下版本的浏览器只支持CSS2标准的选择器语法
【举例代码如下】
js = 'document.getElementById("helloId").click();'
driver.execute_script(js)
js1 = 'document.getElementsByClassName("helloName")[0].value = "王大明";' //整个HTML文档里第一个使用CSS样式类的class="helloName"属性,它的value属性的值设置为“王大明”
driver.execute_script(js1)
三.selenium用jquery定位
待楼主学习后补充
PS:如有疑问欢迎加微信一起探讨——VX:zheng520132