元素定位常用八大方法:
以百度輸入框爲例:
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="100" autocomplete="off">
<a href="http://tieba.baidu.com" target="_blank" class="mnav">貼吧</a>
序號 | 方式 | 舉例 |
1 | 通過id定位 | driver.find_element_by_id('kw') |
2 | 通過name定位 | find_element_by_name('wd') |
3 | 通過class定位 | find_element_by_class_name('s_ipt') |
4 | 通過xpath定位 | find_element_by_xpath('//*[@id="kw"]') |
5 | 通過css定位 | find_element_by_css_selector('#kw') |
6 | 通過tag name 定位 | driver.find_element_by_tag_name('input') |
7 | 通過超鏈接全部文本內容定位 | find_element_by_link_text('貼吧') |
8 | 通過超鏈接部分文本內容定位 | find_element_by_partial_link_text('貼') |
ps:path和css定位,在firefox瀏覽器中都可以使用firepath插件來驗證。
1. Xpath 定位
-
絕對路徑(不推薦)
是一個完整的xpath路徑,可通過瀏覽器插件定位並直接生成。但因爲這種方式是直接寫死的,頁面一旦發生改動,維護成本非常大,所以我們一般都採用相對路徑。例如:xpath=/html/body/div[2]/div[1]/div/div[1]/div/form/span[1]/input
-
相對路徑(推薦)
就是使用元素本身定位。例://*[@id="kw"]
- xpath常用符號:
- / 表示絕對路徑絕對路徑是指從根目錄開始
- // 表示相對路徑
- . 表示當前層
- .. 表示上一層
- * 表示通配符
- @ 表示屬性
- [] 屬性的判斷條件表達式
- xpath定位常用函數:
- contains (): //div[contains(@id,'widget')],選擇id屬性中包含'widget'的div
- text(): //a[text()='hello world'],選擇文本值爲'hello world'的節點
- last(): 選擇最後一個
- starts-with(): //div[starts-with(@id,'common')] ,選擇id屬性中’common’開頭的div節點
- not(): 否定
2、CSS 定位
- css常用符號:
- # 表示id
- . 表示class
- > 表示子元素,層級
- (空格) 一個空格也表示子元素,但是是所有的後代子元素,相當於xpath中的相對路徑
例:
<div class="input_class" type="text" name="passwd" id="passwd-id" />
- #input 選擇id爲passwd-id的節點
- .input_class 選擇class爲input_class的節點
- div#passwd-id>input 選擇id爲passwd-id的div下的所有的input節點
- div#passwd-id input 選擇id爲passwd-id的div下的所有的input節點
- div.input_class[name='passwd'] 選擇class爲input_class並且name爲passwd的節點
- div[name='passwd'][type='text'] 選擇name爲passwd且type爲text的節點