1:id定位
說明:
HTML
規定
id
屬性在整個
HTML
檔案中必須是唯一的,
id
定位就是通過元素的
id
屬性來定位元素
;
前提:元素有
id
屬性
id
定位方法:
find_element_by_id()
實作案例
-1
需求:打開論壇登錄界面(
http://49.233.108.117:3000/signin
),通過
id
定位,輸入用戶 名和密碼,
2:name定位
說明:
HTML
規定
name
屬性來指定元素名稱,
name
的屬性值在當前檔案中可以不是唯一
的,
name
定位就是根據
name
屬性來定位
,
前提:元素有
name
屬性
name
定位方法:
find_element_by_name()
實作案例
-2
需求:打開論壇登錄界面(
http://49.233.108.117:3000/signin
),通過
name
定
位,輸入用戶名和密碼,
3:class_name定位
說明:
HTML
規定
class
來指定元素的類名,
class
定位就是根據
class
屬性來定位,
用法和
name,id
類似,
前提:元素有
class
屬性
class_name
定位方法:
find_element_by_class_name()
實作案例
-3
需求:打開論壇登錄界面(
http://49.233.108.117:3000/signin
),通過
class
定
位,輸入用戶名和密碼,并點擊登錄,
4:tag_name定位
說明:
HTML
本質就是由不同的
tag(
標簽
)
組成,而每個
tag
都是指同一類,所以
tag
定位效
率低,一般不建議使用;
tag_name
定位就是通過標簽名來定位
,
tag_name
定位方法:
find_element_by_tag_name()
實作案例
-4
需求:打開論壇登錄界面(
http://49.233.108.117:3000/signin
),通過
tag
定位,
輸入用戶名和密碼,
5:link_text定位
說明:
link_text
定位于前面
4
個定位有所不同,它專門用來定位超鏈接文本
(
<a>
文本值
</a>
)
前提:
定位的元素是鏈接標簽(
a
標簽)
link_text
定位方法:
find_element_by_link_text()
實作案例
-5
需求:打開百度首頁,通過
link_text(
鏈接文本
)
定位到
hao123
按鈕,并進行點
擊操作
6:partial_link_text定位
說明:
partial_link_text
定位是對
link_text
定位的補充,
partial_link_text
為模糊匹配;
link_text
為全部
匹配,
前提:
定位的元素是鏈接標簽(
a
標簽)
partial_link_text
定位方法:
find_element_by_partial_link_text()
通過傳入
a
標簽區域文本或全部文本來定位元素,要求輸入的文本能夠唯一找到這個元素
實作案例
-6
需求:打開百度新聞(
http://news.baidu.com/
),通過
partial_link_text
定位任何一條新聞, 并進行點擊操作

7:元素組定位
元素組定位方式:
find_elements_by_xxx
作用:
1. 查找返還定位所有符合條件的元素
2. 返還的定位元素格式為串列格式
說明:
串列資料格式的讀取需要指定下標(下標從
0
開始)
案例要求:打開論壇登錄界面
(
http://49.233.108.117:3000/signin
),通過元素組定位,
輸入用戶名和密碼,

xpath和css定位
為什么要學習xpath和css定位
?
在實際專案中標簽沒有
id/name/class
屬性
?
id/name/class
屬性值為動態獲取,隨著重繪或加載而變化
?
xpath
、
css
定位可以解決以上兩類問題
xpath定位
xpath概述:
1. xpath即為
xml path
的簡稱,它是一種用來確定
XML
檔案中某部分位置的語言,
2. HTML可以看做是
XML
的一種實作,所以
selenium
用戶可以使用這種強大的語言在
web
應用中來
定位元素
3. xpath為強大的語言,是因為它有非常靈活的定位策略,
定位方法:
find_element_by_xpath()
xpath定位策略(方式)
1. 路徑定位--
絕對路徑、相對路徑
2. 利用元素屬性定位
3. 層級與屬性結合定位
4. 屬性與邏輯定位結合
1:路徑定位(絕對/相對路徑)
絕對路徑:從最外層元素到指定元素之間所有經過元素層級路徑;如
/html/body/div/p[2]
提示:
1. 絕對路徑是以/
開始
2. 通過瀏覽器查看元素屬性,右擊復制xpath
快速生成
相對路徑:從第一個符合條件元素開始(一般配合屬性來區分);如
//input[@id='kw']
提示:
1. 相對路徑以//
開始
2. 通過瀏覽器查看元素屬性,右擊復制xpath
快速生成
2:利用元素屬性
?
快速定位元素,利用元素唯一屬性;
?
示例:
//*[@id='kw']
?
案例要求:打開論壇登錄界面(
http://49.233.108.117:3000/signin
),通過
xpath
定位,輸入用戶名和密 碼,
3:層級與屬性結合
?
要找到的元素沒有屬性,但是它的父級有;
?
示例:
//*[@id='p1']/input
4:屬性與邏輯結合
?
解決元素之間相同屬性重名問題 ;
?
示例:
//*[@id='telA' and @class='telA']
css定位
? css概述:
1. css(Cascading Style Sheets)是一種語言,它用來描述
HTML
和
XML
的元素顯示樣式,
2. css語言中有
css
選擇器,在
selenium
中也可以使用這種選擇器來進行元素定位
3. css定位方式比
xpath
快,而且
css
的語法也非常強大,所以非常推薦這種方式定位
?
定位方法:
find_element_by_css_selector()
? css定位策略(方式)
1. id選擇器
2. class選擇器
3. 元素選擇器
4. 屬性選擇器
5. 層級選擇器
1:id選擇器
?
根據元素
id
屬性來選擇
?
格式:
#id
屬性值
如:
#userA(
選擇
id
屬性值為
userA
的所有元素
)
?
案例要求:打開論壇登錄界面(
http://49.233.108.117:3000/signin
),通過
css
定位,輸入用戶名和密 碼,
2:class選擇器
?
根據元素
class
屬性來選擇
?
格式:
.class
屬性值
如:
.telA(
選擇
class
屬性值為
telA
的所有元素
)
3:元素選擇器
?
根據元素標簽名來選擇
?
格式:
element
如:
input(
選擇所有
input
元素
)
4:屬性選擇器
?
根據元素的屬性名和值來選擇
?
格式:
[attribute=value]
如:
[type='password'](
選擇所有
type
屬性為
password
的值
)
?
打開論壇登錄界面(
http://49.233.108.117:3000/signin
),通過定位,輸入用戶名和密碼,
5:層級選擇器
?
根據元素的父子關系來選擇
?
格式:
element>element
如:
p>input(
返還所有
p
元素下所有的
input
元素
)
?
提示:
>
可以用空格代替,如
p input
或者
p [type='password']
總結

另一種定位-By
?
匯入
By
類
?
導包:
from selenium.webdriver.comm.by import By
?
By
類的方法:
?
find_element(By.ID,'userA')
?
需要兩個引數,第一個引數為定位的型別,由
By
提供,第二個引數為定位的具體方式,
下拉串列定位
下拉串列定位
?
下拉串列常見的前端表現形式:
Select+Option
和
ul+li
Select型別的下拉框
?
案例
1
:
http://127.0.0.1:5000/signin
進行登錄操作,再定位
select
選項中的內容
?
12306
訂票,
url
:
https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc
?
操作流程:打開網址
--
對發車時間進行切換
? 步驟
1. 導包:
from selenium.webdriver.support.ui import Select
2. 定位Select
元素
3. 定位option
選項:通過呼叫
Select
的方法來進行定位選項
:
select_by_value()
、
select_by_index()
、
select_by_visible_text()
ul+li型別的下拉框
?
定位非
<select>
標簽的下拉選單中的選項,需要兩個步驟,
先定位到下拉選單,再對其中
的選項進行定位,
案例
2
:禪道撰寫用例,
url
:
http://127.0.0.1/index.php
解題思路:
1. 先定位到ul
,并且將定位到的值賦給變數
a
a=driver.find_element_by_id("ul
的
id")
2. 再用變數a
去找到
li
a.find_element_by_id("li
的
id").click()
元素常用屬性
webElement常用屬性與方法
?
定位到元素后,除了對元素進行操作,還可以獲取元素的一些屬性資訊,常見的屬性資訊:
1. 獲取元素的尺寸:
ele.size
2. 獲取元素的坐標:
ele.location
3. 獲取元素的文本內容:
ele.text
text
是存在在一對
a
標簽、
p
標簽或
div
標簽中的文本內容,如果 是標簽中的value
值,是不能通過這種方式來獲取到的,
4. 獲取元素的屬性值:
ele.get_attribut(
屬性名
)
通過傳入不同的屬性名來獲取對應的屬性值
5. 獲取頁面的url
:
driver.current_url
對
url
獲取再進行判斷,是一種常用的檢查方式
6. 獲取頁面的title
:
driver.title
對
title
獲取再進行判斷,也還是一種常用的檢查方式

微信搜一搜【程式員阿沐】關注這個文縐縐的程式員,關注后主頁點擊【領取資料】有我準備的一線大廠面試資料和簡歷模板,希望大家都能找到心儀的作業,學習是一條時而郁郁寡歡,時而開懷大笑的路,加油,如果你通過努力成功進入到了心儀的公司,一定不要懈怠放松,職場成長和新技術學習一樣,不進則退,如果有幸我們江湖再見!