selenium學習記錄1
阿新 • • 發佈:2022-03-18
-
selenium
-
元素定位
-
基本語句
-
find_element('key','value')
- 有多個元素符合定位條件時僅返回第一個,若沒有則丟擲異常
- 有多個元素符合定位條件時僅返回第一個,若沒有則丟擲異常
-
find_element_by_key('value')
- 有多個元素符合定位條件時僅返回第一個,若沒有則返回none
- 有多個元素符合定位條件時僅返回第一個,若沒有則返回none
-
find_elements('key','value')
- 以列表形式返回符合條件的所有元素,若沒有則返回空列表
- 以列表形式返回符合條件的所有元素,若沒有則返回空列表
-
find_element('key','value')
-
基礎知識
-
兄弟元素
- 同縮排
- 同縮排
-
父子元素
- 差級縮排
- 差級縮排
-
兄弟元素
-
id
- 不重複,僅有一個
- 不重複,僅有一個
-
name
- 有可能一個名字有多個元素共用,定位時只按順序返回第一個
- 使用find_elements('name','value')[num],使用list定位元素
- 注:元素位置下標從0開始
- 有可能一個名字有多個元素共用,定位時只按順序返回第一個
-
class name(特指具有class屬性的元素)
- 包含多個類的元素叫複合樣式,不能直接定位,可使用如下的css selector定位
- 包含多個類的元素叫複合樣式,不能直接定位,可使用如下的css selector定位
-
tag name
- 一般用於同類元素,比如說input
-
返回同類元素的個數
- elements = driver.find_elements('tag name', 'input') print(len(elements))
- elements = driver.find_elements('tag name', 'input') print(len(elements))
- 一般用於同類元素,比如說input
-
link text<a>
-
完整超連結a標籤
- <a href="xxx" target="xxx">完整文字</a>
- <a href="xxx" target="xxx">完整文字</a>
-
完整超連結a標籤
-
partial link text<a>
-
部分超連結a標籤
- <>部分文字<>
- <>部分文字<>
-
部分超連結a標籤
-
xpath(萬能,可在chrome中$x除錯)
-
絕對路徑法(需要從根逐級寫到元素位置 )
- ('xpath','/html/xxx..../xxx')
- ('xpath','/html/xxx..../xxx')
-
相對路徑法(從定位元素往上找到能唯一定位的父元素為止)
- ('xpath','//唯一父元素/tr[3]/td[2]/xxx')
- ('xpath','//唯一父元素/tr[3]//xxx')
- 注:相同標籤元素可直接用‘標籤[順序]’
- 注:有省略時可同時使用多個//
- 注:元素位置下標從1開始
- ('xpath','//唯一父元素/tr[3]/td[2]/xxx')
-
屬性定位
- 單屬性:('xpath',"//元素標籤[@屬性='屬性值']")
- 多屬性:('xpath',"//元素標籤[@屬性1='屬性值'][@屬性2='屬性值']")
- 注意單雙引號
- 若定位元素屬性過多,可先找到具有唯一屬性的父元素,再通過相對路徑找到定位元素
- 單屬性:('xpath',"//元素標籤[@屬性='屬性值']")
-
模糊定位
- 模糊定位中的text()表示查詢元素文字
- ('xpath',"//元素標籤或*號[contains(text(),‘元素中包含的文字關鍵字’)]")
- ('xpath',"//元素標籤或*號[contains(@屬性名,‘屬性中包含的關鍵字’)]")
- 模糊定位中的text()表示查詢元素文字
-
除錯-在Chrome中檢驗Xpath的有效性
- 除錯臺-Console
- 語法:$x("Xpath")
- 除錯臺-Console
-
絕對路徑法(需要從根逐級寫到元素位置 )
-
css selector(萬能,可在chrome中$$除錯)
-
利用元素標籤定位所有相同的元素
- find_element('css selector','tr')
- find_element('css selector','tr')
-
class屬性定位(可定位複合樣式)
- 屬性前加.
-
find_element('css selector','.屬性1.屬性2')
- 屬性前加.
-
id屬性定位
-
id前加#
- find_element('css selector','#屬性名')
- find_element('css selector','#屬性名')
-
id前加#
-
多屬性定位
- find_element('css selector',”[屬性1=‘屬性名’][屬性2=‘屬性名’]“)[元素位置list下標)]
- 注:元素位置下標從0開始
- find_element('css selector',”[屬性1=‘屬性名’][屬性2=‘屬性名’]“)[元素位置list下標)]
-
利用標籤父子關係定位
- driver.find_element('css selector', 'tbody > tr:nth-child(1) > td:nth-child(2) > input')
- 注:元素位置下標從1開始
-
爺孫關係:可直接加空格
- find_element('css selector', 'tbody > tr:nth-child(3) i')
- find_element('css selector', 'tbody > tr:nth-child(3) i')
- driver.find_element('css selector', 'tbody > tr:nth-child(1) > td:nth-child(2) > input')
-
模糊定位:*=
- find_element('css selector', '標籤[屬性名*=“屬性所含關鍵字"]')
- find_element('css selector', '標籤[屬性名*=“屬性所含關鍵字"]')
- 除錯語法:$x("Xpath")
-
利用元素標籤定位所有相同的元素
-
總結
-
方式選擇
- 優先考慮id,name等簡單的定位方式
- xpath功能強悍但效能較差
- 一組元素優先考慮name或tag name
- 連結用link text或partial link text
- 優先考慮id,name等簡單的定位方式
-
注意事項
- 找唯一屬性
- 優先相對路徑
- 不要使用唯一屬性定位
- 多與研發溝通,儘量加上id,name,減少不合理頁面的元素,排除重複id
- 找唯一屬性
-
方式選擇
-
基本語句
-
元素等待
- improt time
-
強制等待
- time.sleep()
- 效率低,不能大量使用
- time.sleep()
-
隱式等待
- implicitly_wait()
- 只需設定一次,全域性有效
- 設定的為最長等待時間
- 元素出現即刻停止等待
- implicitly_wait()
-
顯示等待
-
語法操作
-
匯入
- from selenium.webdriver.support.wait import WebDriverWait
- from selenium.webdriver.support import expected_conditions as EC
- from selenium.webdriver.support.wait import WebDriverWait
-
常見EC方法
-
title_is(strtitle)
- 判斷title是否為精確預期值
- 判斷title是否為精確預期值
-
title_contains(strtitle)
- 判斷title是否包含指定字串
- 判斷title是否包含指定字串
-
presence_of_element_located(locator)
- 判斷元素是否在dom樹內,不代表元素一定可見
- 判斷元素是否在dom樹內,不代表元素一定可見
-
visibility_of_element_located(locator)
- 判斷元素是否可見,可見代表非隱藏,並且元素寬高皆不為0
- 判斷元素是否可見,可見代表非隱藏,並且元素寬高皆不為0
-
invisibility_of_element_located(locator)
- 判斷元素是否不可見
- 判斷元素是否不可見
-
element_to_be_clickable(locator)
- 判斷某個按鈕元素是否可見並且enable的,這樣的話才叫可點選
- 判斷某個按鈕元素是否可見並且enable的,這樣的話才叫可點選
-
text_to_be_present_in_element(locator,txet)
- 判斷某個元素中的text是否包含預期字串
- 判斷某個元素中的text是否包含預期字串
-
title_is(strtitle)
-
使用示例
- WebDriverWait(driver,5).until(EC.text_to_be_present_in_element(('id','msg'),'出錯啦'))
- 說明:locator為定位方法
- WebDriverWait(driver,5).until(EC.text_to_be_present_in_element(('id','msg'),'出錯啦'))
-
匯入
- 可針對每一個元素進行單獨設定
- 若顯示隱式等待同時設定,則以最長等待時間為準
-
語法操作
- improt time
-
元素操作
-
常用簡單操作
-
clear
- 清楚文字框內文字
- 清楚文字框內文字
-
send_keys
- 傳送文字
- 傳送文字
-
click
- 點選
- 點選
-
text
- 獲取標籤之間(節點)的文字資訊
- 獲取標籤之間(節點)的文字資訊
-
get_attribute(name)
- 獲取元素的屬性資訊
- 獲取元素的屬性資訊
-
is_displayed
- 判斷元素是否會顯示出來
- 判斷元素是否會顯示出來
-
is_enabled
- 判斷是否可用
- 判斷是否可用
-
is-selected
- 判斷是否選中
- 判斷是否選中
-
clear
-
常用複合操作
-
複選框常見操作
- is_displayed() is_enabled() is_selected()
- is_displayed() is_enabled() is_selected()
-
傳送複合按鍵
-
from selenium.webdriver.common.keys import Keys send_keys(Keys.SHIFT,"xxx")
-
示例:send_keys(Keys.CONTRAL+'a')
- 全選
- 全選
-
示例:send_keys(Keys.CONTRAL+'a')
-
from selenium.webdriver.common.keys import Keys send_keys(Keys.SHIFT,"xxx")
-
下拉列表常見3個操作
-
from selenium.webdriver.support.ui import Select
-
Select(driver.find_element('tag name', 'select')).select_by_index(3)
- 以順序選擇
- 以順序選擇
-
Select(driver.find_element('tag name', 'select')).select_by_value('sh')
- 以value選擇
- 以value選擇
-
Select(driver.find_element('tag name', 'select')).select_by_visible_text('成都')
- 以文字選擇
- 以文字選擇
-
Select(driver.find_element('tag name', 'select')).select_by_index(3)
-
from selenium.webdriver.support.ui import Select
-
複選框常見操作
-
frame
-
switch_to.frame()
- 從A frame切到B frame
- 從A frame切到B frame
-
switch_to.default_content()
- 從B frame切回A frame
- 從B frame切回A frame
-
switch_to.frame()
-
常用簡單操作
-
元素定位