UI自動化要做的就是模擬鼠標或鍵盤操作,從而執行測試用例的行爲。
模擬鼠標操作更多是通過控制元素進行動作的,而控制元素的第一步就是定位元素。
接下來,結合Selenium介紹幾種常見的元素定位方法:
1、id定位
find_element_by_id("") #通過id來定位元素
在HTML中,id是唯一的,通過id但部分元素可能沒有id或id爲隨機值。
2、name定位
find_element_by_name("") #通過name來定位元素
3、class定位
find_element_by_class_name("") #通過class來定位元素
4、tag定位
find_element_by_tag_name("") #通過tag來定位元素
5、link定位
find_element_by_link_text("") #通過link來定位元素
6、partial link定位
find_element_by_partial_link_text("") #通過元素標籤對之間的部分文字進行元素定位
上述幾種元素定位方法是最簡單的,系統登錄頁面還可以用用,但遇到頁面元素相對複雜的是較難應用起來的。
經常會遇到元素無id、元素爲動態值、相同屬性的元素有多個等情況,此時上述幾種發放就顯得不適用了。
7、XPath定位(UI自動化應用最普遍的)
XPath路徑表達式,使用路徑表達式的方式來選取XML文檔中的節點或者節點集。
這些路徑表達式和我們在常規的電腦文件系統中看到的表達式非常相似。
學習地址可以參考:https://www.runoob.com/xpath/xpath-tutorial.html
下面列出了最有用的路徑表達式:
在XPath中,有七種類型的節點:元素、屬性、文本、命名空間、處理指令、註釋以及文檔節點(或稱爲根節點)。
節點關係有:父(Parent)子(Children)同胞(Sibling)先輩(Ancestor)後代(Descendant)
下面XPath的幾種元素定位方法
- 絕對路徑定位
find_element_by_xpath("/html/body/div[2]/div[2]/div[5]/div[1]/div/form/span[2]/input")
通過元素的絕對路徑進行定位,可以通過Chrome瀏覽器-F12-Elenents-右鍵元素屬性-XPath-Copy Full XPath獲取。
但是不推薦,當頁面元素改變時,元素需要重新定位,不利於後期維護。
- 利用元素定位(與前六種方法類似)
#利用元素屬性進行定位 find_element_by_xpath("//input[@id='**']") find_element_by_xpath("//input[@name='**']") find_element_by_xpath("//input[@class='**']") find_element_by_xpath("//input[@type='**']") 。。。。。。
#利用元素層級屬性進行定位,相對路徑 #根據class屬性唯一值,一層一層定位到元素 find_element_by_xpath("//div[@class='**'])/table/tbody/tr/td/div")
#利用邏輯運算符進行定位 find_element_by_xpath("//input[@id='**' and @name='**']") find_element_by_xpath("//input[@id='**' or @name='**']")
#利用contains包含方法進行定位 find_element_by_xpath("//input[@type='**']")
#利用starts-with,使用開始位置元素進行定位 find_element_by_xpath("//input[starts-with(@name,'vaule')]")
#利用ends-with,使用結束位置元素進行定位 find_element_by_xpath("//input[ends-with(@name,'vaule')]")
#利用text()進行元素定位 find_element_by_xpath("//input[text(),'百度']")
#其它方法 #string-length()、substring、substring-before()、substring-after()
8、CSS_selector定位
CSS選擇器可以更靈活的選擇空間的任意屬性,且CSS定位速度比XPath定位快。
學習路徑可以參考:https://www.runoob.com/css/css-tutorial.html
find_element_by_css_selector(".**") #通過class定位,CSS中class選擇器以"."來定義 find_element_by_css_selector("#**") #通過id定位,CSS中id選擇器以"#"來定義 find_element_by_css_selector("div") #通過標籤名定位 find_element_by_css_selector("[name='**']") #通過name進行定位 find_element_by_css_selector("td > div") #通過父標籤,查找子元素中標籤名爲div的所有元素 。。。。。。