當前位置:
首頁 > 最新 > 千鋒分享:軟體測試之元素定位的重要性

千鋒分享:軟體測試之元素定位的重要性

1、 元素定位的重要性

2、 SELENIUM2中有幾種元素定位方法

2.1 幾種定位方式

2.2.常用的幾種:

Id, xpath,className

3、XPATH介紹

備註:XPath即為XML路徑語言,它是一種用來確定XML(標準通用標記語言的子集)文檔中某部分位置的語言

3.1示例

示例請打開demo.html, 輸入/html/body 表示選擇根目錄下html下的body

/body ,會看到沒有節點可以被選擇,因為/如果用在開頭的話,表示根目錄,而根目錄是html節點

3.2介紹

☆/html/div ,沒有節點可以被選擇,因為/如果用在中間,表示絕對路徑,是上一個節點的子結點,而html的子節點是head與body

☆/html//div ,表示選擇根目錄下的所有的子孫後代節點中的div節點,//表示相對路徑

☆//div ,表示選擇所有的div節點,可以想想/html//div與//div為什麼結果是一樣的!

☆//div/div ,表示選擇所有的div節點的子節點中含有div的節點

☆//div/div/. ,表示選擇//div/div節點的當前層的節點,與//div/div的結果相同

☆//div/div/.. ,表示選擇//div/div節點的上一層節點,也就是選擇一個div節點,該div節點的子節點有div節點。有點繞口,但細細理解,會恍然大悟的

☆//div/div/* ,表示選擇//div/div的所有子節點,//div/div會有兩個匹配出來的節點,但為什麼//div/div/*只有一個了呢?這是因為第二個//div/div下面沒有子節點了,所以只匹配出來了一個

☆//div[@id="input"] ,表示選擇一個id為』input』的div節點

☆//div[@id="input"]/input ,表示選擇一個id為』input』的div節點的input子節點

☆//table//input[@id="user"] ,表示選擇table的子孫後代中id為user的input節點

☆//input[@name="identity" and @class="Volvo"] ,有的節點,只用一個屬性無法定位出來,必須要用到多個屬性進行組合定位,用連接符and。這個XPATH表示選擇一個name為identity並且class為Volvo的input節點

☆//input[@name="identity" or @class="Volvo"] ,這個多屬性組合用的是or的連接符,這個XPATH表示選擇一個name為identity,或者class為Volvo的節點,所以,這個XPATH匹配出來了4個節點

☆//input[@name="identity" or @class="Volvo"][1] 見圖13,我們剛知道了,u//input[@name="identity" or @class="Volvo"]匹配出4個,我們只需要第一個,怎麼辦?加index即可://input[@name="identity" or @class="Volvo"][1],請注意,xpath的index是以1開頭的,並不是0,請切記!取最後一個,//input[@name="identity" or @class="Volvo"][last()]

☆需要特別注意的一個地方:

//table//tr//input ,這個匹配出來的,有14個節點,但是如果我們需要取到第一個,怎麼辦?

有可能會用到://table//tr//input[1],但是我們來看看結果,匹配出來的節點居然是8個,而不是1個,這是因為//table//tr//input[1]是指先匹配出//table下面的所有的tr子孫後代節點,並且再此基礎上,再匹配出tr節點的所有的子孫後代中的input結點的第一個,由於tr眾多,所以匹配出的結果肯定不是一個,但如何能匹配出1個?也就是說我們需要把眾多的tr給固定出一個,這時候再看:

//table//tr[1]//input[1],這時候就只有一個匹配出來的節點,所以,請大家仔細揣摩這裡面的區別,細細體會

3.3 幾個常用函數

1.contains (): //div[contains(@id,"in")] ,表示選擇id中包含有』in』的div節點

2.text():由於一個節點的文本值不屬於屬性,比如「baidu」,所以,用text()函數來匹配節點://a[text()="baidu"]

3.last():前面已介紹

4.starts-with(): //div[starts-with(@id,"in")] ,表示選擇以』in』開頭的id屬性的div節點

5.not()函數,表示否定,//input[@name=『identity』 and not(contains(@class,『a』))] ,表示匹配出name為identity並且class的值中不包含a的input節點。 not()函數通常與返回值為true or false的函數組合起來用,比如contains(),starts-with()等,但有一種特別情況請注意一下:我們要匹配出input節點含有id屬性的,寫法如下://input[@id],如果我們要匹配出input節點不含用id屬性的,則為://input[not(@id)]

其實,軟體測試是一份深而廣的職業,想要真正意義上的精通,要拼上一生的精力。千鋒更多的是要讓你比其他的入門者更領先一些,實現一步先步步先的優勢,讓你的起點高一些,起薪高一些,在可觸及的範圍內,助你一臂之力。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 上海千鋒 的精彩文章:

零基礎學習UI設計必須掌握這些
學習軟體測試需要投入多少錢呢?

TAG:上海千鋒 |