1. CSS locator比XPath locator速度快笋轨,特別是在IE下面(IE沒有自己的XPath 解析器(Parser))
2. 對于文本的處理xpath更強(qiáng)大使用, text()匹配的是顯示文本信息俭驮。
String locator_Xpath = "http://*[contains(text(),'test')]";
但需要注意的是text()獲取的是當(dāng)前元素的文本秸架,不包括其子元素的文本羹饰。如下代碼text()得到的結(jié)果是"Please
click here"仔涩。但如果使用$("#id1").text()獲取的是"Memo Please click
here",使用selenium獲取元素text也是"Memo Please click here"饲常。
<div id="id1"><span>Memo<span>? ? Please click here</div>
3. 對于class屬性Css能直接匹配部分涯呻,而Xpath對于class跟普通屬性一致,使用字符串精確匹配面徽,需要使用contains()函數(shù)才能匹配部分字符串
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String locator_Xpath="http://div[@class='class1 popup js-dragable alert-msg']//input[@class='class3']";
String locator_Xpath="http://div[contains(@class,'popup js-dragable alert-msg')]//input[@class='class3']";
String locator_Css = ".class1.js-dragable .class3"
?4. 使用祖先元素屬性與當(dāng)前元素屬性組合處理時(shí)
<div class="111"><div><div><input class = "222"/></div></div></div>String locator_xpath="http://div[@class='111'/*/*/*[@class='222']]";
String locator_xpath="http://div[@class='111'//[@class='222']]"String locator_css = ".111 .222";
?*注意兩個(gè)class之間有一個(gè)空格表示層級關(guān)系艳丛,且空格選擇所有層級的子元素,而>只選擇一代
5.模糊匹配
?XPathCss
選取屬性值中的部分string匹配//span[contains(@class,'popup-btn js-dragable')]span[title*='456']
?//input[starts-with(@name,'name1')]input[name^='name1']
?//input[ends-with(@name,'name1')]input[name$='name1']
?**ends-with()?function is part of XPath 2.0 but browsers generally only support 1.0.
6.多個(gè)屬性匹配
??? xpath=//a[@class='name' and value='123']
??? css = a[.name][value='123']
7. 第n個(gè)子元素的選擇
<div class="category_depth_1 bnr"><li><a href="/estore/kr/zh/c/1" class="on">護(hù)膚</a></li><li><a href="/estore/kr/zh/c/1" class="on">家電</a></li><li><a href="/estore/kr/zh/c/1" class="on">美妝</a></li><li><a href="/estore/kr/zh/c/1" class="on">母嬰</a></li><li><a href="/estore/kr/zh/c/1" class="on">電子產(chǎn)品</a></li></div>String locator_Xpath = "http://*[@class="category_depth_1 bnr"]//li[1]"String locator_Css = ".category_depth_1.bnr li:first-child"String locator_Css = ".category_depth_1.bnr li:last-child"String locator_Css = ".category_depth_1.bnr li:nth-child(1)"#index都是從1開始
以上元素如果選擇點(diǎn)擊li元素有可能點(diǎn)擊不生效而選擇點(diǎn)擊a標(biāo)簽趟紊,這個(gè)時(shí)候需要注意index還是要標(biāo)在li標(biāo)簽后面String locator_Xpath = "http://*[@class="category_depth_1 bnr"]//li[1]/a"
String locator_Css = ".category_depth_1.bnr li:first-child a"
String locator_Css = ".category_depth_1.bnr li:last-child>a"
String locator_Css = ".category_depth_1.bnr li:nth-child(1)>a"
8. 擁有某個(gè)屬性的元素
xpath= //*[@title]
css= *[title]
9. 擁有子元素a的P元素
xpath= //div[a]
css 不能實(shí)現(xiàn)
10. 匹配祖先元素
xpath= div[@id="id1"]//ancestor::tr//td
css 不能實(shí)現(xiàn)
?11. 查找兄弟元素氮双, Css只能查找元素后面的元素,不能向前找
xpath= //div[@class="class1"]//preceding-sibling::div[1]
xpath= //div[@class="class1"]//follow-sibling::div[1]
css= div.class1+div
12. 查找不包含not霎匈,以不包含display: none為例
xpath= //div[@class="name"?and not(contains(@style,"display: none"))]
css= div.name:not([style*='display: none'])