目錄
一、selenium的介紹
二、selenium的原理
三、selenium的八種元素定位的方法
1、ID定位:
2 、name定位:
3、class定位:
4、tag定位:
5、link_text定位:
6、partial_link_text定位:
7、css定位:
8、Xpath定位
四、selenium的常用元素操作
五、實(shí)例
資料獲取方法
一、selenium的介紹
Selenium是一個(gè)流行的自動(dòng)化測(cè)試工具,用于測(cè)試Web應(yīng)用程序的功能和用戶界面。它可以模擬用戶在瀏覽器中的操作,如點(diǎn)擊、輸入文本、選擇下拉框等,以及驗(yàn)證頁(yè)面元素的狀態(tài)和屬性。Selenium可以幫助測(cè)試人員自動(dòng)執(zhí)行重復(fù)的測(cè)試任務(wù),提高測(cè)試效率并減少人工錯(cuò)誤。
二、selenium的原理
在我們的自動(dòng)化程序中,我們需要導(dǎo)入selenium庫(kù)中的WebDriver類來創(chuàng)建一個(gè)WebDriver對(duì)象,通過調(diào)用selenium客戶端庫(kù)相應(yīng)的函數(shù)發(fā)送請(qǐng)求給瀏覽器驅(qū)動(dòng)(如ChromeDriver)。
當(dāng)我們使用WebDriver驅(qū)動(dòng)程序執(zhí)行代碼時(shí),WebDriver會(huì)將我們的指令轉(zhuǎn)化為HTTP請(qǐng)求,并將其發(fā)送給瀏覽器驅(qū)動(dòng)程序。
瀏覽器驅(qū)動(dòng)是連接Selenium庫(kù)和瀏覽器的橋梁,它負(fù)責(zé)與瀏覽器進(jìn)行通信,并執(zhí)行我們編寫的代碼來控制和操作瀏覽器。
瀏覽器驅(qū)動(dòng)程序接收到這些HTTP請(qǐng)求后,會(huì)將其轉(zhuǎn)化為瀏覽器可執(zhí)行的指令,并將指令發(fā)送給瀏覽器進(jìn)行執(zhí)行。執(zhí)行完成后,瀏覽器將結(jié)果返回給瀏覽器驅(qū)動(dòng)程序,再由瀏覽器驅(qū)動(dòng)程序?qū)⒔Y(jié)果轉(zhuǎn)化為HTTP響應(yīng),并將其返回給我們的代碼程序。
三、selenium的八種元素定位的方法
selenium實(shí)現(xiàn)UI自動(dòng)化的關(guān)鍵就在于元素定位,可謂,只要定位了元素就能夠調(diào)用方法對(duì)UI元素進(jìn)行操控。在介紹元素定位的方法前,我們需要先知道我們定位的代碼寫得對(duì)不對(duì),此時(shí)F12的強(qiáng)大之處就體現(xiàn)出來了!
可以把開發(fā)者工具調(diào)出來,選擇Elements,隨便點(diǎn)擊一個(gè)元素,然后點(diǎn)擊Ctrl+F,在此搜索框可以搜索到當(dāng)前頁(yè)面的所有元素,再把我們定位元素的代碼復(fù)制進(jìn)行搜索,若搜索結(jié)果能定位到元素,則證明定位元素的方法寫對(duì)了。
?在selenium中,有八種元素定位的方法,下面將進(jìn)行介紹。
1、ID定位:
find_element(By.ID, 'Id屬性值')
舉例:
id屬性值為kw,則代碼為find_element(By.ID, 'kw')
在 CSS 中,id是用于標(biāo)識(shí)網(wǎng)頁(yè)元素的一種重要屬性并且id是唯一的,因此,若定位的元素存在id值的話,通過ID定位是一個(gè)非常便捷的方式。
2 、name定位:
find_element(By.NAME,'name屬性值')
舉例:
?name屬性值為referrer,則代碼為find_element(By.NAME,'referrer)
3、class定位:
find_element(By.CLASS_NAME,'class屬性值')
舉例:
class屬性值為foot-async-script,則代碼為find_element(By.CLASS_NAME,'foot-async-script')
當(dāng)class屬性值有多個(gè)時(shí),可以指定任意一個(gè)class 屬性值,都可以選擇到這個(gè)元素
4、tag定位:
find_element(By.TAG_NAME,'元素的標(biāo)簽值')
舉例:
標(biāo)簽值為style,則代碼為find_element(By.TAG_NAME,'style')
因?yàn)槎ㄎ坏降脑夭晃ㄒ?,所以我們可以使?code>find_elements(By.TAG_NAME,'style') ,注意find_element和find_elements的區(qū)別,find_elements返回的是一個(gè)列表
5、link_text定位:
find_element(By.LINK_TEXT,'超鏈接文字')
舉例:
如百度首頁(yè)的視頻則為超鏈接文字,代碼可寫為find_element(By.LINK_TEXT, '視頻')
6、partial_link_text定位:
find_element(By.PARTIAL_LINK_TEXT,'超鏈接部分文字')
舉例,
如超鏈接文字太長(zhǎng),也可以只輸入部分,也能定位到元素, 如圖上的“百度一下,你就知道-移動(dòng)首頁(yè)”屬性值可寫為:移動(dòng)首頁(yè)
,代碼:find_element(By.PARTIAL_LINK_TEXT, '移動(dòng)首頁(yè)')
即可定位到元素
7、css定位:
find_element(By.CSS_SELECTOR,'css值')
更多的時(shí)候,元素是沒有id、class值的,或者屬性值不唯一,此時(shí)我們可以用CSS selector語(yǔ)法來選擇元素,CSS選擇器是Web開發(fā)中常用的一種定位元素的方法,可以在HTML文檔中快速準(zhǔn)確地找到所需的元素。
(1)通過標(biāo)簽名tag選擇元素
例如?div,?p,?a等標(biāo)簽,例如,找出所有標(biāo)簽名為div的元素
find_elements(By.CSS_SELECTOR, 'div')
(2)通過類名class選擇元素
語(yǔ)法為在class值前加一個(gè).
號(hào),
舉例:
代碼為:find_element(By.CSS_SELECTOR, '.foot-async-script')
(3)通過ID選擇元素
語(yǔ)法為在id值前加一個(gè)#
號(hào),
舉例:
代碼為:find_element(By.CSS_SELECTOR, '#result_tts_player')
(4)通過屬性來選擇元素
語(yǔ)法為[屬性名=屬性值]
舉例:
代碼為:find_element(By.CSS_SELECTOR, '[name=theme-color]')
也可以與標(biāo)簽名、id值或者類名組合使用 如find_element(By.CSS_SELECTOR, 'meta[name=theme-color]')
(5)通過子元素來選擇
語(yǔ)法:元素1 > 元素2
若元素2在元素里面,如:
類屬性wgt-navbar是類屬性navbar-wrapper層級(jí)下的,則可以通過子元素語(yǔ)法來更準(zhǔn)確的定位元素,代碼為:find_element(By.CSS_SELECTOR, '.navbar-wrapper > .wgt-navbar)
(6)通過后代元素來選擇
語(yǔ)法:元素1 元素2
與子元素一樣,后代元素也是在元素里面;不同的是,子元素只能是元素的直接子元素,而后代元素可以不是直接子元素,子元素一定是后代元素,后代元素不一定是子元素。
比如元素a > 元素b > 元素c > 元素d,元素b是元素a的子元素,元素c是元素b的子元素但不是a的子元素,元素c是元素a的后代元素。
舉例:
類屬性navbar-bg是類屬性wgt-navbar層級(jí)下的,而wgt-navbar是navbar-wrapper的子元素,則navbar-bg是navbar-wrapper的后代元素。 則可以通過后代元素語(yǔ)法來更準(zhǔn)確的定位元素,代碼為:find_element(By.CSS_SELECTOR, '.navbar-wrapper .navbar-bg)
8、Xpath定位
XPath定位的優(yōu)點(diǎn)是靈活且功能強(qiáng)大,可以根據(jù)元素的屬性、標(biāo)簽名、層級(jí)關(guān)系、文本內(nèi)容等多個(gè)特征進(jìn)行定位。在某些情況下,XPath定位可能更適合定位復(fù)雜的元素結(jié)構(gòu)或特殊的元素。然而,XPath表達(dá)式相對(duì)于CSS選擇器來說更復(fù)雜一些,有時(shí)可能會(huì)更加冗長(zhǎng)。因此,在實(shí)際使用中,可以根據(jù)具體的情況選擇使用CSS選擇器還是XPath定位來定位元素。
XPath定位方式可以分為絕對(duì)路徑和相對(duì)路徑兩種方式。
(1)絕對(duì)路徑定位:
絕對(duì)路徑是從根節(jié)點(diǎn)開始,通過一系列的節(jié)點(diǎn)路徑來定位元素。絕對(duì)路徑以斜杠?/?開頭,表示根節(jié)點(diǎn),然后按照節(jié)點(diǎn)層級(jí)關(guān)系逐級(jí)定位。例如,/html/body/div[1]/input?表示從根節(jié)點(diǎn)開始,先選擇html元素,然后選擇body元素,再選擇第一個(gè)div元素,最后選擇其中的input元素。
(2)相對(duì)路徑定位:
相對(duì)路徑是相對(duì)于當(dāng)前節(jié)點(diǎn)的路徑,更常用且靈活。相對(duì)路徑以雙斜杠?//?開頭,表示從當(dāng)前節(jié)點(diǎn)的任意位置開始,選擇符合條件的元素。例如,//input?表示選擇文檔中所有的input元素,不論其在文檔中的位置。下面介紹下如何根據(jù)元素的屬性、標(biāo)簽名、層級(jí)關(guān)系、文本內(nèi)容等特征進(jìn)行定位。
//tagname: 選擇所有具有指定標(biāo)簽名的元素
//tagname[@attribute='value']: 選擇具有指定屬性和屬性值的元素。
//* [@attribute='value']: 選擇具有指定屬性和屬性值的任意元素
//parent/child: 選擇父元素下的直接子元素。
//ancestor/descendant: 選擇ancestor元素下的所有descendant元素。
//* [text()='value']: 選擇具有指定文本內(nèi)容的任意元素。
XPath定位方式也支持使用邏輯運(yùn)算符和多個(gè)條件進(jìn)行定位。例如,可以使用?and、or、not?來組合多個(gè)條件。
四、selenium的常用元素操作
click(): 單擊元素。
send_keys(value): 向輸入框元素發(fā)送文本。
clear(): 清空輸入框元素的文本。
get_attribute(name): 獲取元素的指定屬性值。
is_displayed(): 判斷元素是否可見。
is_enabled(): 判斷元素是否可用。
is_selected(): 判斷元素是否被選中。
五、實(shí)例
需求: 從百度搜索進(jìn)入微博,然后獲取微博熱搜數(shù)據(jù)并輸出到txt文檔中
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
class test(object):
def __init__(self):
self.driver = webdriver.Chrome()
self.driver.get('https://www.baidu.com/')
#self.driver.get('https://weibo.com/')
self.driver.implicitly_wait(10) #`全局等待`?該方法接受一個(gè)參數(shù), 用來指定最大等待時(shí)長(zhǎng)
self.driver.maximize_window() #最大化瀏覽器頁(yè)面
def baidu_search(self):
self.driver.find_element(By.ID,'kw').send_keys('微博') #通過id值定位
self.driver.find_element(By.CSS_SELECTOR,"[value=百度一下]").click() #通過CSS選擇器定位
self.driver.find_element(By.PARTIAL_LINK_TEXT,'微博-隨時(shí)隨地發(fā)現(xiàn)新鮮事').click() #通過超鏈接定位
for handle in self.driver.window_handles: #不斷切換窗口至我們想要的窗口:Sina
# 先切換到該窗口
self.driver.switch_to.window(handle)
# 得到該窗口的標(biāo)題欄字符串,判斷是不是我們要操作的那個(gè)窗口
if 'Sina' in self.driver.title:
# 如果是,那么這時(shí)候WebDriver對(duì)象就是對(duì)應(yīng)的該該窗口,正好,跳出循環(huán),
break
def get_weibo_hot_search(self):
time.sleep(10)
hot_search_list = self.driver.find_elements(By.XPATH, '//*[@class="wbpro-textcut f14 cla"]')
print(len(hot_search_list))
print(hot_search_list)
for list in hot_search_list:
hot_search_text=list.text
self.save_data(hot_search_text)
def save_data(self, hot_search_text):
with open(r'C:\Users\User\Desktop\output.txt', 'a', encoding='utf-8', newline='') as f: # 用追加的方式將數(shù)據(jù)保存到txt文件中
# for number,hot_search_text in hot_search.items():
f.write(hot_search_text+'\n')
def main(self):
self.baidu_search()
self.get_weibo_hot_search()
self.driver.quit()
if __name__ == '__main__':
ceshi = test() # 實(shí)例化對(duì)象
ceshi.main() # 調(diào)用類函數(shù)入口
資料獲取方法
【留言777】
各位想獲取源碼等教程資料的朋友請(qǐng)點(diǎn)贊 + 評(píng)論 + 收藏,三連!文章來源:http://www.zghlxwxcb.cn/news/detail-641564.html
三連之后我會(huì)在評(píng)論區(qū)挨個(gè)私信發(fā)給你們~文章來源地址http://www.zghlxwxcb.cn/news/detail-641564.html
到了這里,關(guān)于簡(jiǎn)單入門seleniumUI自動(dòng)化測(cè)試的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!