Selenium定位元素操作示例
本文實(shí)例講述了Selenium定位元素操作。分享給大家供大家參考,具體如下:
Selenium是一個(gè)用于Web應(yīng)用程序測(cè)試的工具。Selenium測(cè)試直接運(yùn)行在瀏覽器中,就像真正的用戶在操作一樣。支持的瀏覽器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。這個(gè)工具的主要功能包括:測(cè)試與瀏覽器的兼容性——測(cè)試你的應(yīng)用程序看是否能夠很好得工作在不同瀏覽器和操作系統(tǒng)之上。測(cè)試系統(tǒng)功能——?jiǎng)?chuàng)建回歸測(cè)試檢驗(yàn)軟件功能和用戶需求。支持自動(dòng)錄制動(dòng)作和自動(dòng)生成 .Net、Java、Perl等不同語(yǔ)言的測(cè)試腳本。
在前面一篇《Selenium基本用法》中簡(jiǎn)單記錄了Selenium的使用,接下來(lái)記錄一下元素的定位,Selenium提供了多種策略來(lái)定位頁(yè)面中的元素,Selenium提供了以下方法來(lái)定位頁(yè)面中元素,你可以根據(jù)自己的喜好來(lái)進(jìn)行選擇:
- find_element_by_id:通過(guò)ID進(jìn)行匹配查找,只返回匹配到的一個(gè)元素
- find_element_by_name:通過(guò)name進(jìn)行匹配查找,只返回匹配到的一個(gè)元素
- find_element_by_xpath:通過(guò)xpath進(jìn)行匹配查找,只返回匹配到的一個(gè)元素
- find_element_by_link_text:通過(guò)鏈接內(nèi)容進(jìn)行匹配查找,只返回匹配到的一個(gè)元素
- find_element_by_partical_link_text:通過(guò)部分鏈接內(nèi)容進(jìn)行匹配查找,只返回匹配到的一個(gè)元素
- find_element_by_tag_name:通過(guò)標(biāo)簽名稱(chēng)進(jìn)行匹配查找,只返回匹配到的一個(gè)元素
- find_element_by_class_name:通過(guò)class名稱(chēng)進(jìn)行匹配查找,只返回匹配到的一個(gè)元素
- find_element_by_css_selector:通過(guò)CSS選擇器進(jìn)行匹配查找,只返回匹配到的一個(gè)元素
值得注意的是,上面方法只會(huì)匹配查找只會(huì)獲取第一個(gè)元素。除了上面這些查找單個(gè)元素的方法之外,Selenium還定義查找多個(gè)元素的方法:
- find_elements_by_name:通過(guò)name進(jìn)行匹配查找,返回所有匹配到的元素列表
- find_elements_by_xpath:通過(guò)xpath進(jìn)行匹配查找,返回所有匹配到的元素列表
- find_elements_by_link_text:通過(guò)鏈接內(nèi)容進(jìn)行匹配查找,返回所有匹配到的元素列表
- find_elements_by_partical_link_text:通過(guò)部分鏈接內(nèi)容進(jìn)行匹配查找,返回所有匹配到的元素列表
- find_elements_by_tag_name:通過(guò)標(biāo)簽名稱(chēng)進(jìn)行匹配查找,返回所有匹配到的元素列表
- find_elements_by_class_name:通過(guò)class名稱(chēng)進(jìn)行匹配查找,返回所有匹配到的元素列表
- find_elements_by_css_selector:通過(guò)CSS選擇器進(jìn)行匹配查找,返回所有匹配到的元素列表
除了上面給出的公有方法之外,Selenium還提供了兩種私有方法可能對(duì)頁(yè)面對(duì)象中的定位器有用,這兩個(gè)私有方法是:find_element和find_elements:
from selenium.webdriver.common.by import By element = driver.find_element(By.XPATH,'//*[@id="su"]') elements = driver.find_elements(By.XPATH,'//button')
下面是By可用的屬性:
ID = 'id' NAME = 'name' XPATH = 'xpath' LINK_TEXT = '鏈接內(nèi)容' PARTIAL_LINK_TEXT = '部分鏈接內(nèi)容' TAG_NAME = '標(biāo)簽名稱(chēng)' CLASS_NAME = '類(lèi)名' CSS_SELECTOR = 'CSS選擇器'
通過(guò)ID定位
當(dāng)你知道元素的ID屬性時(shí),你可以使用它,使用此策略,將返回ID屬性值與該匹配的第一個(gè)元素。如果沒(méi)有元素匹配到此ID屬性,將會(huì)引發(fā)NoSuchElementException錯(cuò)誤,舉個(gè)栗子,有這樣一個(gè)數(shù)據(jù)源:
<input id="login_id" type="text"/>
我們知道了這個(gè)元素的ID,我們可以這樣進(jìn)行定位:
element = driver.find_element_by_id('login_id')
通過(guò)name定位
當(dāng)你知道元素的name屬性時(shí),你可以使用它,使用此策略,將返回name屬性值與該匹配的第一個(gè)元素。如果沒(méi)有元素匹配到此name屬性,將會(huì)引發(fā)NoSuchElementException錯(cuò)誤,舉個(gè)栗子,有這樣一個(gè)數(shù)據(jù)源:
<input name="login" type="text"/>
我們知道了這個(gè)元素的name,我們可以這樣進(jìn)行定位:
element = driver.find_element_by_name('login')
通過(guò)XPath定位
XPath是用于在XML文檔中查找節(jié)點(diǎn)的語(yǔ)言,由于XML可以是HTML的實(shí)現(xiàn),因此Selenium用戶可以利用這種強(qiáng)大的語(yǔ)言來(lái)定位其Web應(yīng)用程序中的元素。XPath擴(kuò)展了通過(guò)id和name屬性定位的簡(jiǎn)單方法,并打開(kāi)了各種新的可能性,例如在頁(yè)面中查找第三個(gè)復(fù)選框。舉個(gè)栗子,有這樣一個(gè)數(shù)據(jù)源:
<html> <body> <form id="loginForm"> <input name="username" type="text" /> <input name="password" type="password" /> <input name="continue" type="submit" value="Login" /> <input name="continue" type="button" value="Clear" /> </form> </body> <html>
我們可以這樣進(jìn)行定位:
user_element = driver.find_element_by_xpath("/html/body/form/input[@name='username']")
或者
user_element = driver.find_element_by_xpath("/html/body/form/input")
或者
user_element = driver.find_element_by_xpath('//input[1]')
或者
user_element = driver.find_element_by_xpath("http://input[@name='username'][@type='text']")
通過(guò)鏈接內(nèi)容定位
當(dāng)你知道鏈接元素的內(nèi)容時(shí),你可以使用它,使用此策略,將返回鏈接內(nèi)容與該匹配到的第一個(gè)元素。如果沒(méi)有元素匹配到此鏈接內(nèi)容,將會(huì)引發(fā)NoSuchElementException錯(cuò)誤,舉個(gè)栗子,有這樣一個(gè)數(shù)據(jù)源:
<html> <body> <p>Are you sure you want to do this?</p> <a href="continue.html" rel="external nofollow" rel="external nofollow" >Continue</a> <a href="cancel.html" rel="external nofollow" >Cancel</a> </body> <html>
其中<a href="continue.html" rel="external nofollow" rel="external nofollow" >Continue</a>元素可以這樣定位:
element = driver.find_element_by_link_text('Continue')
或者
element = driver.find_element_by_partical_link_text('Con')
通過(guò)標(biāo)簽名稱(chēng)定位
當(dāng)你知道標(biāo)簽的名稱(chēng)時(shí),你可以使用它,使用此策略,將返回標(biāo)簽名稱(chēng)與該匹配到的第一個(gè)元素。如果沒(méi)有元素匹配到此標(biāo)簽名稱(chēng)時(shí),將會(huì)引發(fā)NoSuchElementException錯(cuò)誤,舉個(gè)栗子,有這樣一個(gè)數(shù)據(jù)源:
<html> <body> <h1>Welcome</h1> <p>Site content goes here.</p> </body> <html>
我們可以這樣對(duì)<p>元素進(jìn)行定位:
element = driver.find_element_by_tag_name("p")
通過(guò)類(lèi)名進(jìn)行定位
當(dāng)你知道類(lèi)名的時(shí)候,你可以使用它,使用此策略,將返回類(lèi)名與該匹配到的第一個(gè)元素。如果沒(méi)有元素匹配到此類(lèi)名稱(chēng)時(shí),將會(huì)引發(fā)NoSuchElementException錯(cuò)誤,舉個(gè)栗子,有這樣一個(gè)數(shù)據(jù)源:
<html> <body> <p class="content">Site content goes here.</p> </body> <html>
我們可以這樣對(duì)<p>元素進(jìn)行定位:
element = driver.find_element_by_class_name('content')
通過(guò)CSS選擇器進(jìn)行定位
當(dāng)你想通過(guò)CSS選擇器語(yǔ)法找到一個(gè)元素時(shí),你可以使用它,使用此策略,將返回匹配CSS選擇器的第一個(gè)元素。如果沒(méi)有元素匹配到此CSS選擇器時(shí),將會(huì)引發(fā)NoSuchElementException錯(cuò)誤,舉個(gè)栗子,有這樣一個(gè)數(shù)據(jù)源:
<html> <body> <p class="content">Site content goes here.</p> </body> <html>
我們可以這樣對(duì)<p>元素進(jìn)行定位:
element = driver.find_element_by_css_selector('body p')
更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python Socket編程技巧總結(jié)》、《Python URL操作技巧總結(jié)》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》及《Python入門(mén)與進(jìn)階經(jīng)典教程》
希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
使用python調(diào)用瀏覽器并打開(kāi)一個(gè)網(wǎng)址的例子
這篇文章主要介紹了使用python調(diào)用瀏覽器并打開(kāi)一個(gè)網(wǎng)址的例子,使用webbrowser模塊實(shí)現(xiàn),需要的朋友可以參考下2014-06-06
Python利用selenium建立代理ip池訪問(wèn)網(wǎng)站的全過(guò)程
selenium控制瀏覽器也是可以使用代理ip的,下面這篇文章主要給大家介紹了關(guān)于Python利用selenium建立代理ip池訪問(wèn)網(wǎng)站的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
使用Python實(shí)現(xiàn)數(shù)據(jù)庫(kù)文檔生成工具
這篇文章主要為大家詳細(xì)介紹了如何使用Python實(shí)現(xiàn)數(shù)據(jù)庫(kù)文檔生成工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2024-04-04
python入門(mén)前的第一課 python怎樣入門(mén)
人工智能這么火,0基礎(chǔ)能學(xué)python嗎?python該怎么選擇編輯器?怎么搭建python運(yùn)行環(huán)境?python好學(xué)嗎,怎么學(xué)?這是所有python入門(mén)前同學(xué)都會(huì)提出的疑問(wèn),這篇文章和大家一起學(xué)習(xí)python,感興趣的小伙伴們可以加入2018-03-03
python實(shí)現(xiàn)微信小程序的多種支付方式
這篇文章主要為大家介紹了python實(shí)現(xiàn)微信小程序的多種支付方式的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04
PyTorch 中的 torch.utils.data 解析(推薦)
這篇文章主要介紹了PyTorch?torch.utils.data.Dataset概述案例詳解,主要介紹對(duì)?torch.utils.data.Dataset?的理解,需要的朋友可以參考下2023-02-02
Python 面向?qū)ο蟛糠种R(shí)點(diǎn)小結(jié)
這篇文章主要介紹了Python 面向?qū)ο蟛糠种R(shí)點(diǎn),總結(jié)分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類(lèi)、對(duì)象、實(shí)例等相關(guān)概念、原理與使用技巧,需要的朋友可以參考下2020-03-03

