我們先了解一下Xpath基礎(chǔ)語法佑笋,如下:
符號 | 含義 | 舉例 |
---|---|---|
/ | 從根節(jié)點選取。 | /bookstore——選取根元素 bookstore。 |
// | 從匹配選擇的當前節(jié)點選擇文檔中的節(jié)點钠署,而不考慮它們的位置哗戈。 | //book——選取所有 book 子元素,而不管它們在文檔中的位置玻佩。 |
. | 選取當前節(jié)點出嘹。 | |
.. | 選取當前節(jié)點的父節(jié)點。 | |
@ | 選取屬性 | //@lang——選取名為 lang 的所有屬性咬崔。 |
xpath常用函數(shù):
函數(shù)名 | 舉例 | 用途 |
---|---|---|
contains () | //div[contains(@id,'widget')] | 選擇id屬性中包含'widget'的div |
text() | //a[text()='hello world'] | 選擇文本值為'hello world'的節(jié)點 |
last() | 選擇最后一個 | |
starts-with() | //div[starts-with(@id,'common')] | 選擇id屬性中’common’開頭的div節(jié)點 |
not() | 否定 |
一.Xpath的定位方法(復制路徑的定位經(jīng)常會經(jīng)常不到的税稼,建議還是手寫吧)
1.通過絕對路徑做定位(不推薦使用!)
WebElement ele = driver.findElement(By.xpath("html/body/div/form/input"));
2.第2種方法:通過元素索引定位
WebElement ele = driver.findElement(By.xpath("http://input[4]"));
例:
3.使用xpath屬性定位
1)By.xpath("http://input[@id='kw']")
2)By.xpath("http://input[@class="next_btn" and @value="next" ]")
3)By.xpath("http://input[@type='radio' or @name='select[]']")
4.使用部分屬性值匹配(最強大的方法)
WebElement ele = driver.findElement(By.xpath("http://input[start-with(@id,'fuck')]"))——匹配id以fuck開頭的元素垮斯,id='fuckyou'
WebElement ele = driver.findElement(By.xpath("http://input[ends-with(@id,'fuck')]"))——匹配id以fuck結(jié)尾的元素郎仆,id='youfuck'
WebElement ele = driver.findElement(By.xpath("http://input[contains(@id,'fuck')]"))——匹配id中含有fuck的元素,id='youfuckyou'
5.使用任意值來匹配屬性及元素
WebElement ele = driver.findElement(By.xpath("http://input[@*='fuck']"))——匹配所有input元素中含有屬性的值為fuck的元素
6.使用XPATH軸來定位元素
還沒怎么用過兜蠕,就去借用他人的吧:插入# 笑笑唔萊的 使用xpath的軸(Axis)進行元素定位
注:元素定位總結(jié)(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的內(nèi)核引擎就是用JavaScript來驅(qū)動的扰肌,所以只要selenium自帶的那些原始辣雞方法出現(xiàn)定位不了的、點擊不了的并發(fā)癥一旦發(fā)作熊杨,就可以使用JavaScript大絕招曙旭,除了JavaScript,還有jQuery大絕招晶府。
以下總結(jié)了5種js定位的方法:
1.通過id獲取
document.getElementById(“id”)
2.通過name獲取
document.getElementsByName(“Name”)
返回的是list
3.通過標簽名選取元素
document.getElementsByTagName(“tag”)
4.通過CLASS類選取元素
document.getElementsByClassName(“class”)
兼容性:IE8及其以下版本的瀏覽器未實現(xiàn)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屬性的值設(shè)置為“王大明”
driver.execute_script(js1)
三.selenium用jquery定位
待樓主學習后補充
PS:如有疑問歡迎加微信一起探討——VX:zheng520132