1、八種基本元素定位方法css
1.經過id定位:find_element_by_id()
2.經過name定位:find_element_by_name()
3.經過class定位:find_element_by_class_name()
4.經過tag定位:find_element_by_tag_name()
5.經過link定位:find_element_by_link_text()----精準匹配
6.經過partial_link定位:find_element_by_partial_link_text()-----模糊匹配
7.經過xpath定位:find_element_by_xpath()
8.經過css定位:find_element_by_css_selector()html
其中每一種定位方法又有兩種方式,好比經過id來定位:python
find_element_by_id()ui
find_elements_by_id()spa
這二者的區別在於,不加s返回的是第一個匹配到的元素,加上s返回全部匹配到的元素orm
2、XPATH定位htm
在ui自動化中比較靈活又經常使用的是xpath定位,如下是幾種xpath定位的語法格式blog
在說xpath定位以前,格式要先弄清楚圖片
絕對定位:/開頭,嚴格按照元素的樹級路徑(只能是爸爸的兒子)
相對定位://開頭,相對路徑(爸爸的全部後代)ip
xpath定位語法格式:
單個屬性://標籤名[@屬性名稱=值]
多個屬性://標籤名[@屬性名稱=值 and/or @屬性名稱=值]
包 含://標籤名[contains(@屬性名稱,「值")],例://a[contains(@href,"abc")]
文 本://標籤名[text()=文本],例://a[text()='做業']
包含和文本同用://a[contains(text(),'做業')]
針對xpath的幾種語法格式定位分別進行舉例說明:
(1)、單個屬性
例如在網址欄位輸入www.baidu.com,去定位百度輸入框這個元素,用鼠標 點擊上去發現該元素有class、id、name屬性,很是之豐富,那咱們就能夠根據其中的任何一個進行定位
//*[@id='kw']
//*[@name='wd']
//*[@class='s_ipt']
(2)、多個屬性
例如定位百度這張圖片所在元素,它也存在不少個不一樣的屬性,只經過一個屬性沒法定位的時候,咱們能夠根據多個屬性進行組合定位
(3)、包含
當元素的某個屬性的值很長,或者很差記的時候,咱們可使用包含,例如定位「百度一下」這個按鈕的元素,value值包含百度一詞便可定位到惟一一個
(4)、文本
//span[text()='換一換']
(5)、包含和文本同用
//span[contains(text(),'換一換')]
3、XPATH軸定位
軸運算
ancestor:祖先節點,包括父
parent:父節點
preceding:當前元素節點標籤以前的全部節點(html頁面前後順序)
preceding-sibling:當前元素節點標籤以前的全部兄弟節點
following:當前元素節點標籤以後的全部節點(html頁面前後順序)
following-sibling:當前元素節點標籤以後的全部兄弟節點
軸定位語法:
已知的元素/軸名稱::標籤名稱[@屬性=值]
舉例:
以百度首頁爲例,定位「百度一下」按鈕的元素,用鼠標定位到該按鈕後,發現該元素的父標籤是<span>,span的父標籤是<form>,咱們能夠經過form標籤來一步步找到「百度一下」的標籤
如下提供兩種xpath路徑:
//form[@id='form']//following-sibling::span[@class='bg s_btn_wr']/input----------先經過id找form標籤,再經過class找其兄弟節點,再找下面的input標籤
//form[@id='form']//following::input[@id='su']---------------------先經過id找form標籤,再找該節點後的全部節點中找出id爲su的input標籤
因此元素定位是很是靈活的,能夠有多種方式,平時通常較難定位的纔會用到軸定位,實際上改元素經過id就能惟必定位了
4、CSS定位語法
driver.find_element_by_css_selector("#kw").send_keys("python")------id屬性driver.find_element_by_css_selector(".s_ipt").send_keys("python")------class屬性driver.find_element_by_css_selector("[name='wd']").send_keys("python")-----name屬性driver.find_element_by_css_selector("input#kw").send_keys("python")----標籤與id屬性的組合driver.find_element_by_css_selector("input.s_ipt").send_keys("python")------標籤與class屬性的組合driver.find_element_by_css_selector("form#form>span>input").send_keys("python")-----經過層級關係定位