UI自動(dòng)化工具千變?nèi)f化、架構(gòu)千變?nèi)f化,但都逃離不開的關(guān)鍵一步就是元素定位。下面以Selenium為例介紹常見的幾個(gè)元素定位方法
ID - 元素id屬性
WebElement El =?driver.findElement(by.id(“id”))
name- 元素name屬性
WebElement El=driver.findElement(by.name(“name”))
className -元素class屬性
WebElement El =?driver.findElement(by.className(“className”));
tagName- 元素標(biāo)簽名
WebElement El =?driver.findElement(by.tagName(“button”))
linkText- 鏈接元素a的顯示文字
WebElement El =?driver.findElement(By.linkText("Inbox"));
partialLinkText
WebElement El =?driver.findElement(By.partialLinkText("Inbox"));
?
補(bǔ)充:以上知識(shí)遍地都有,不多贅述。但真實(shí)環(huán)境中遇到的DOM往往很復(fù)雜的多,下面我們來分析一下可能會(huì)遇到的幾種情況
1. 分級(jí)定位: 復(fù)雜環(huán)境可以先定位父級(jí)元素,然后再定位子元素,例如parentElement.findElement(By.***)
2.ID定位是最快速最準(zhǔn)確的,但實(shí)際上需要開發(fā)人員的友好配合才能有唯一且確定的id可用,真實(shí)環(huán)境中往往會(huì)出現(xiàn)沒有id,id重復(fù)或者動(dòng)態(tài)id(extjs和query都是動(dòng)態(tài)id);若動(dòng)態(tài)id有規(guī)律我們還能考慮使用正則表達(dá)式,否則只能老老實(shí)實(shí)另謀出路了。
3. 定位數(shù)組元素 :實(shí)際使用中className和tagName經(jīng)常被用來定位數(shù)組元素,例如driver.findElement s (by.tagName(“**”))或driver.findElement s (by.className(“**”))
例如,打開www.baidu.com,運(yùn)行List<WebElement> Els=?driver.findElements(by.tagName(“a”));看看是不是得到了一個(gè)元素?cái)?shù)組
4. className不允許使用復(fù)合類名做參數(shù)
? ?真實(shí)環(huán)境中元素往往使用復(fù)合類名(即多個(gè)class用空格分隔),使用className定位時(shí)要注意了,className的參數(shù)只能是一個(gè)class。
例如,打開http://hao.360.cn/,我們要使用className定位這個(gè)元素
< a class ="tab-item news" data-page ="http://sh.qihoo.com/daohang/index1.html" hidefocus ="false" href ="./brother.html#!news" > 新聞?lì)^條 </ a >
1)執(zhí)行driver.findElements(by.className("news")),成功定位到元素
2)執(zhí)行driver.findElements(by.className("tab-item news")),定位失敗,報(bào)錯(cuò)信息: Compound class names not permitted,意思是 不允許使用 復(fù)合類名稱
分析:className的參數(shù)僅允許是一個(gè)class,此處 class="tab-item news" 是復(fù)合類名,直接使用會(huì)報(bào)錯(cuò)
5. linkText與 partialLinkText
遇到文字鏈接元素,首先考慮使用linkText定位,那它與partialLinkText有什么區(qū)別與特性吶?
1)?linkText=鏈接文字,表示精準(zhǔn)匹配鏈接文字;partialLinkText=部分鏈接文字,表示模糊匹配鏈接文字。例如定位一下元素
< a target ="_blank" title ="" href ="http://www.nuomi.com/?cid=bdsywzl" > 勞動(dòng)節(jié)不勞動(dòng),吃喝玩樂5.1元起! </ a >
?
|?driver.findElement(By.linkText("勞動(dòng)節(jié)不勞動(dòng),吃喝玩樂5.1元起!"));
|?driver.findElement(By.partialLinkText("吃喝玩樂"));
2.都對(duì)大小寫敏感
?
?
這篇文章對(duì)兩者進(jìn)行了詳細(xì)的介紹并附有案例 http://blog.csdn.net/aerchi/article/details/8931023
復(fù)雜定位:cssselector、xpath、javascript正在路上........
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
