Python+Selenium學習筆記之元素定位
書籍學習:《Selenium2 自動化測試實戰——基於Python語言》P69-P83
定位方法 | 類型 | 釋義 | 格式與實例 | 優缺點 |
id定位 | 屬性 | HTML規定Id屬性在HTML文檔中必須是唯一的,但是可能存在頁面上的多個元素的id相同 |
格式:find_element_by_id("") find_element_by_id("kw") |
定位不到唯一的元素 |
name定位 | 屬性 | HTML規定name來指定元素的名稱,name的屬性值可以不唯一 |
格式:find_element_by_name("") find_element_by_name("wd") |
定位不到唯一的元素;不唯一,不必要 |
class定位 | 屬性 | HTML規定class來指定元素的類名 |
格式:find_element_by_class_name("") find_element_by_class_name("s_ipt") |
定位不到唯一的元素 |
tag定位 | 屬性 | tag不唯一,一個tag用來定義一類功能,因此重複性強 |
格式:find_element_by_tag_name("") find_element_by_tag_name("input") |
定位不到唯一的元素,重複性強 |
link定位 | 屬性 | 定位文本鏈接 |
格式:find_element_by_link_name("") find_element_by_link_name("新聞") |
定位不到唯一的元素 |
partial link定位 | 屬性 | 模糊定位,對於文本較長的鏈接,可選取一部分文本進行定位 |
格式:find_element_by_partial_link_text("") find_element_by_partial_link_text("很長") |
定位不到唯一的元素 |
Xpath定位 | 絕對路徑 | Xpath用標籤名的層級關係來定位元素的絕對路徑:最外層是html->body->標籤 |
格式:find_element_by_xpath("") div[2]:當前層級下的第二個div find_element_by_xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input") |
繁瑣 |
利用元素屬性 |
//:當前頁面的某個目錄下 input:定位元素的標籤名 [@id='kw']:元素id等於kw *:不想制定標籤名 |
格式:1.find_element_by_xpath("//*[@屬性='']") 2.find_element_by_xpath("//input[@屬性='']") 實例:find_element_by_xpath("//input[@id='kw']") find_element_by_xpath("//*[@class='bg s_btn']") |
xpath不侷限於id、name、class,元素的任意屬性值都可以 | |
層級與屬性 | 某一個元素沒有可利用的屬性值,可查找上一級屬性 |
格式:find_element_by_xpath("//爺爺/父親/兒子") 實例:find_element_by_xpath("//form[@id='form']/span/input")等價於 find_element_by_id("kw") find_element_by_xpath("//form[@id='form']/span[2]/input")等價於 find_element_by_id("su") |
是絕對路徑的一種寫法 | |
邏輯運算符 | 如果屬性不能唯一地區分一個元素,可以使用邏輯運算符連接多個屬性來查找元素 | find_element_by_xpath("//input[@id='kw' and @class='su']/span/input") | ||
CSS定位 | 通過Class屬性 | 點號(.)表示通過class屬性定位元素 |
格式:find_element_by_css_selector(".") 實例:find_element_by_css_selector(".s_ipt")
|
|
通過id屬性 | 井號(#)表示通過id屬性定位元素 |
格式:find_element_by_css_selector("#") 實例:find_element_by_css_selector("#kw") |
||
通過標籤名 |
格式:find_element_by_css_selector("") 實例:find_element_by_css_selector("input") |
|
||
通過父子關係 |
find_element_by_css_selector("span>input") 父元素爲span,子元素爲input |
|||
通過屬性 |
find_element_by_css_selector("[autocomplete=off]") find_element_by_css_selector("[name='kw']") find_element_by_css_selector('[type="submit"]') |
|||
組合定位 |
find_element_by_css_selector("form.fm>span>input.s_ipt") 說明:標籤form的class屬性值fm下面的span標籤下面的Input標籤的class屬性值s_ipt find_element_by_css_selector("form#form>span>input#kw") 說明:標籤form下的id值爲form下面的span標籤下面的Input標籤的id值爲kw |