不管是APP(Android)自動化測試,還是Web自動化測試,都是需要進行元素的獲取的。所以這次要說的就是如何獲取Web頁面元素。
慣例介紹:
一、頁面概況
其實上次我們一個簡單的腳本是如下頁面:

這其實就是百度的首頁,在這張頁面上有輸入框、按鈕和文字鏈接,還有一些圖片、頁面底部的文字,以及一些設置下拉框等。自動化要做的就是模擬鼠標和鍵盤來操作這些元素,或單擊,或輸入等。通過前端工具,可以看到頁面上的元素都是由一行行代碼組成的,它們之間有層級的組織起來,每個元素有不同的標簽名和屬性值。WebDriver就是通過這些信息找到不同的元素。
二、元素概況

有兩種方式查看頁面元素:
(1)通過鍵盤"F12"按鍵可以調出來
(2)通過右擊頁面,選擇菜單檢查即可,方便定位出元素

如何獲取?
一、綜述
1、WebDriver提供了8種元素定位方法,在Python語言中,所對應方法如下:
1.1第一種對應方式
id —> find_element_by_id()
class name —> find_element_by_class_name()
link text —> find_element_by_link_text()
xpath —> find_element_by_xpath()
name —> find_element_by_name()
tag name —> find_element_by_tag_name()
partial link text —> find_element_by_partial_link_text()
css selector —> find_element_by_css_selector()
1.2第二種對應方式(By定位元素)
前提是需要導入相應的類:from selenium.webdriver.common.by import By
id —> find_element(By.ID,"")
class name —> find_element (By.CLASS_NAME,"")
link text —> find_element (By.LINK_TEXT,"")
xpath —> find_element (By.XPATH,"")
name —> find_element (By.NAME,"")
tag name —> find_element (By.TAG_NAME,"")
partial link text —> find_element_by (By.PARTIAL_LINK_TEXT,"")
css selector —> find_element_by (By.CSS_SELECTOR,"")
二、詳解
百度首頁的前端代碼:

以輸入框和“百度一下”為例:


1、id定位
find_element_by_id("kw")
find_element_by_id("su")
或者
find_element(By.ID,"kw")
find_element(By.ID,'"su")
2、name定位
find_element_by_name("wd")
或者
find_element(By.NAME,"wd")
3、class定位
find_element_by_class_name("s_ipt")
或者
find_element(By.CLASS_NAME,"s_ipt")
4、tag定位
find_element_by_tag_name("input")
或者
find_element(By.TAG_NAME,"input")
5、link定位
link定位與前面介紹的幾種定位方法有所不同,它專門用來定位文本鏈接,例如:

find_element_by_link_text("新聞")
或者
find_element(By.LINK_TEXT,"新聞")
以上幾個都可以使用此方式。
6、partial link定位
此定位方式和link定位類似,不過有些文本鏈接會比較長,這個時候就可以取文本的一部分定位,只要這一部分信息可以唯一的標示這個鏈接即可,例如:

find_element_by_partial_link_text("新聞大發現")
或者
find_element(By.PARTIAL_LINK_TEXT,"新聞大發現")
7、xpath定位
xpath定位方式比較多,是一種在XML文檔中定位元素的語言。因為HTML可以看作XML的一種實現,所以Selenium可以使用這種強大的語言在Web應用中定位元素。
7.1絕對路徑定位
參考百度首頁前端代碼,可以找到輸入框:

find_element_by_xpath("/html/body/div/div/div[5]/div/div/form/span/input")
或者
find_element (By.XPATH,"/html/body/div/div/div[5]/div/div/form/span/input")
7.2利用元素屬性定位
這里就說一中簡單的方式,百度首頁右擊檢查定位到元素所在前端代碼位置,然后右擊選擇"copy XPath":

find_element_by_xpath("//*[@id="kw"]")
或者
find_element (By.XPATH,"//*[@id="kw"]")
xpath不限於所寫方式,還有一些復雜定位方式(組合定位),遇到難以定位時可以使用。
8、CSS定位
CSS(Cascading Style Sheets)是一種語言,用來描述HTML和XML文檔的表現。

8.1class定位
find_element_by_class_name(".s_ipt")
或者
find_element_by (By.CSS_SELECTOR,".s_ipt")
點號(.)表示通過class屬性來定位元素。
8.2id定位
find_element_by_class_name("#kw")
或者
find_element_by (By.CSS_SELECTOR,"#kw")、
井號(#)表示通過id屬性來定位元素。
CSS不限於所寫方式,還有一些復雜定位方式(組合定位),遇到難以定位時可以使用。