一、Selenium中元素定位共有八種
id
name
className
tagName
linkText
partialLinkText
xpath
cssSelector
其中前六種都比較簡單,通過id一般可以得到一個唯一的定位,其他五種要注意元素是否唯一,如果有多個,返回的是匹配的第一個元素。下面詳細講解一下xpath和cssSelector定位。
二、xpath定位
1.通過絕對路徑定位
dr.findElement(By.xpath("/html/body/div[2]/div/div/div/div/form/span/input"));
個人測試,第一個html前的斜杠可以有也可以沒有。xpath定位時,下標從1開始,如div[2]代表第二個div
2.通過相對路徑定位
dr.findElement(By.xpath("//body/div[2]/div/div/div/div/form/span/input"));
3.通過屬性值定位
dr.findElement(By.xpath("input[@]id='su'"));
4.通過層級定位,某個元素不容易定位,但是它的父元素可以容易定位到
dr.findElement(By.xpath("//form[@id='form']/span/input"));
5.通過多個屬性的邏輯運算符
dr.findElement(By.xpath("//input[@id='kw' and @class='s_ipt']") );
注意:
當值中含空格的時候,會定位不到,如這樣定位dr.findElement(By.className("bg s_btn"));所以當有空格時,建議換一個其他的值進行定位。
三、通過cssSelector定位
選擇器 | 例子 | 說明 |
.class | .s_ipt | 類名為s_iptd的所有元素 |
#id | #kw | id為kw的所有元素 |
父元素>子元素 | span>input | 父元素為span的所有input元素 |
[attribute=value] | [type='submit'] | type為submit的所有元素 |
1.通過id選擇器定位
dr.findElement(By.cssSelector("input#kw") ).sendKeys("test");
2.通過類名定位器定位
dr.findElement(By.cssSelector("input.s_ipt")).sendKeys("test");
3.通過父子元素
dr.findElement(By.cssSelector("form#form>span>input[name='wd']")).sendKeys("test");
4.通過屬性名,多個時,將屬性用[]連接在一起
dr.findElement(By.cssSelector("input[id='kw'][name='wd']")).sendKeys("test");
兩者對比:
css語法比xpath更加復雜點,但是定位速度更快,語法更加簡潔。