一、什么是元素定位
- 元素定位就是查找HTML元素的過程,操作頁面元素之前,首先要對元素進(jìn)行定位,所以定位是自動化腳本編寫的開始。
- 通常使用find_element或find_elements方法來定位元素(find_element?使用給定的方法定位和查找一個元素;find_elements?使用給定的方法定位和查找所有的元素)
二、Selenium元素定位常用API
1.By_id定位
當(dāng)所定位的元素具有id屬性的時候我們可以通過by_id來定位該元素
例如:打開百度,定位搜索框
搜索框頁面源代碼:屬性id值為kw
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="255" autocomplete="off">
'''
1.學(xué)習(xí)目標(biāo)
必須掌握selenium中元素定位方法,id定位方法
2.操作步驟(語法)通過元素id屬性定位
driver.find_element_by_id(id屬性的值)
3.需求
在百度頁面中使用id屬性定位百度輸入框
'''
# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
# 2.打開瀏覽器(獲取瀏覽器對象)
driver = webdriver.Chrome()
# 3.輸入網(wǎng)址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.元素定位(id定位方法),百度輸入框
'''
注意:
如果有多個相同屬性值的元素,單數(shù)形式,定位第一個.
'''
srk = driver.find_element_by_id("kw")
# 打印srk對象
print(srk)
# 查看元素對應(yīng)的源碼
print(srk.get_attribute("outerHTML"))
# 5.關(guān)團(tuán)瀏覽器
driver.quit()
'''
輸出結(jié)果:
<selenium.webdriver.remote.webelement.WebElement
(session="6fbad6d63614e1cae6cd346153a7105e",
element="0dd374b6-74ed-4f4c-b610-5c772fd8c366")>
我們可以看到srk是一個WebElement類型的對象。
查看元素對應(yīng)的源碼如下:
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
說明我們已經(jīng)把百度首頁的輸入框獲取到了。
'''
復(fù)數(shù)形式:
'''
學(xué)習(xí)目標(biāo)
復(fù)數(shù)形式
復(fù)數(shù)定位形式:driver.find_elements_XXX
復(fù)數(shù)定位,返回的列表類型數(shù)據(jù)<list>
遍歷列表操作具體元素
'''
# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
# 2.打開瀏覽器
driver = webdriver.Chrome()
# 3.輸入網(wǎng)址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.通過by_id復(fù)數(shù)定位
srk = driver.find_elements_by_id("kw")
# 5.查看返回結(jié)果數(shù)據(jù)類型
print("結(jié)果數(shù)據(jù)類型", type(srk))
print("元素個數(shù)", len(srk))
# 6.遍歷結(jié)果,查看源碼
for i in srk:
# 查看元素對應(yīng)的源碼
print(i.get_attribute("outerHTML"))
# 7.關(guān)團(tuán)瀏覽器
driver.quit()
'''
結(jié)果數(shù)據(jù)類型 <class 'list'>
元素個數(shù) 1
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
'''
異??偨Y(jié):
異常1:AttributeError:'list' object has no attribute 'get_attribute' :表示定位元素返回的是一個列表格式,原因:使用復(fù)數(shù)定位方式 find_elements獲取的定位
異常2 :NoSuchElementException : 表示元素沒找到元素,原因是定位方式出現(xiàn)問題,有一種情況是屬性值寫錯了。
現(xiàn)在我也找了很多測試的朋友,做了一個分享技術(shù)的交流群,共享了很多我們收集的技術(shù)文檔和視頻教程。
如果你不想再體驗(yàn)自學(xué)時找不到資源,沒人解答問題,堅持幾天便放棄的感受
可以加入我們一起交流。而且還有很多在自動化,性能,安全,測試開發(fā)等等方面有一定建樹的技術(shù)大牛
分享他們的經(jīng)驗(yàn),還會分享很多直播講座和技術(shù)沙龍
可以免費(fèi)學(xué)習(xí)!劃重點(diǎn)!開源的?。。?qq群號:110685036【暗號:csdn999】
2.by_name 定位
當(dāng)所定位的元素具有name屬性的時候,我們可以通過by_name來定位該元素
如上圖中的百度搜索頁面,搜索框頁面源代碼:屬性name值為wd
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
使用name屬性定位百度搜索框
'''
1.學(xué)習(xí)目標(biāo):
必須掌握selenium的元素定位方法by_name
2.語法
name定位
driver.find_element_by_name(name屬性的值)
3.需求
使用name屬性定位百度搜索框
4.總結(jié)
當(dāng)元素中有name屬性時才能使用上述定位方法
'''
# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
# 2.打開瀏覽器(獲取瀏覽器對象)
driver = webdriver.Chrome()
# 3.輸入網(wǎng)址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4. 使用name定位百度搜索框
'''
注意:
如果有多個相同屬性值的元素,單數(shù)形式,定位第一個.
'''
srk = driver.find_element_by_name("wd")
# 打印srk對象
print(srk)
# 打印定位元素所在行的源碼
print(srk.get_attribute("outerHTML"))
# 5.關(guān)閉瀏覽器
driver.quit()
'''
輸出結(jié)果:
<selenium.webdriver.remote.webelement.WebElement
(session="3149d334336f0eab9e4d8d394e4efd72",
element="0.1359081202533734-1")>
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
'''
復(fù)數(shù)形式:
'''
學(xué)習(xí)目標(biāo)
復(fù)數(shù)形式
復(fù)數(shù)定位形式:driver.find_elements_XXX
復(fù)數(shù)定位,返回的列表類型數(shù)據(jù)<list>
遍歷列表操作具體元素
'''
# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
# 2.打開瀏覽器
driver = webdriver.Chrome()
# 3.輸入網(wǎng)址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.通過by_id復(fù)數(shù)定位
srk = driver.find_elements_by_name("wd")
# 5.查看返回結(jié)果數(shù)據(jù)類型
print("結(jié)果數(shù)據(jù)類型", type(srk))
print("元素個數(shù)", len(srk))
# 6.遍歷結(jié)果,查看源碼
for i in srk:
# 查看元素對應(yīng)的源碼
print(i.get_attribute("outerHTML"))
# 7.關(guān)團(tuán)瀏覽器
driver.quit()
'''
結(jié)果數(shù)據(jù)類型 <class 'list'>
元素個數(shù) 1
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
'''
3.by_class_name 定位
當(dāng)所定位的元素具有class屬性的時候,我們可以通過by_class_name來定位該元素
搜索框頁面源代碼:屬性classname值為s_ipt
<input type="text" class="s_ipt" name="wd" id="kw" maxlength="255" autocomplete="off">
使用class屬性定位百度搜索框
'''
1.學(xué)習(xí)目標(biāo):
必須掌握selenium的元素定位方法by_class_name
2.語法
classname定位
driver.find_element_by_class_name(class屬性值)
3.需求
使用class屬性定位百度搜索框
4.總結(jié)
當(dāng)元素中有class屬性時才能使用上述定位方法
'''
# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
# 2.打開瀏覽器(獲取瀏覽器對象)
driver = webdriver.Chrome()
# 3.輸入網(wǎng)址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4. 使用name定位百度搜索框
'''
注意:
如果有多個相同屬性值的元素,單數(shù)形式,定位第一個.
'''
srk = driver.find_element_by_class_name("s_ipt")
# 打印srk對象
print(srk)
# 查看元素對應(yīng)的源碼
print(srk.get_attribute("outerHTML"))
# 5.關(guān)閉瀏覽器
driver.quit()
'''
輸出結(jié)果:
<selenium.webdriver.remote.webelement.WebElement
(session="e4f97a48e7f113e681950b62c7789966",
element="0.5782514739919584-1")>
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
'''
復(fù)數(shù)形式:
'''
學(xué)習(xí)目標(biāo)
復(fù)數(shù)形式
復(fù)數(shù)定位形式:driver.find_elements_XXX
復(fù)數(shù)定位,返回的列表類型數(shù)據(jù)<list>
遍歷列表操作具體元素
'''
# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
# 2.打開瀏覽器
driver = webdriver.Chrome()
# 3.輸入網(wǎng)址
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.通過by_id復(fù)數(shù)定位
srk = driver.find_elements_by_class_name("s_ipt")
# 5.查看返回結(jié)果數(shù)據(jù)類型
print("結(jié)果數(shù)據(jù)類型", type(srk))
print("元素個數(shù)", len(srk))
# 6.遍歷結(jié)果,查看源碼
for i in srk:
# 查看元素對應(yīng)的源碼
print(i.get_attribute("outerHTML"))
# 7.關(guān)團(tuán)瀏覽器
driver.quit()
'''
結(jié)果數(shù)據(jù)類型 <class 'list'>
元素個數(shù) 1
<input id="kw" name="wd" class="s_ipt" value="" maxlength="255" autocomplete="off">
'''
4.by_tag_name 定位
by_tag_name方法可以通過元素的標(biāo)簽名來查找元素。由于搜索到的標(biāo)簽名通常不 止一個,所以一般結(jié)合使用find_elements方法來使用
假設(shè)頁面中有一個button按鈕
<button type="submitA" value="注冊A" title="加入會員A">注冊用戶A</button>
'''
1.學(xué)習(xí)目標(biāo):
必須掌握selenium中tag_name定位方法
2.語法
driver.find_element_by_tag_name(標(biāo)簽名) # 單數(shù)形式
driver.find_elements_by_tag_name(標(biāo)簽名) # 定位一組標(biāo)簽名相同的元素
3.需求
在頁面中,使用tag_name對按鈕注冊用戶A定位
'''
# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打開瀏覽器(獲取瀏覽器對象)
driver = webdriver.Chrome()
# 3.打開注冊A頁面
url = "file:///" + os.path.abspath("./練習(xí)頁面/注冊A.html")
driver.get(url)
sleep(2)
# 4.使用tag_name定位按鈕
'''
注意:
如果有多個相同標(biāo)簽的元素,單數(shù)形式,定位第一個.
'''
button = driver.find_element_by_tag_name("input")
print(button.get_attribute("outerHTML"))
# 5.關(guān)閉瀏覽器
sleep(2)
driver.quit()
'''
輸出結(jié)果:
<input type="textA" name="userA" id="userA" placeholder="賬號A" required="" value="">
'''
復(fù)數(shù)形式:
'''
1.學(xué)習(xí)目標(biāo):
必須掌握selenium中tag_name定位方法
2.語法
driver.find_element_by_tag_name(標(biāo)簽名) # 單數(shù)形式
driver.find_elements_by_tag_name(標(biāo)簽名) # 定位一組標(biāo)簽名相同的元素
3.需求
在頁面中,使用tag_name復(fù)數(shù)形式定位 input標(biāo)簽
'''
# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打開瀏覽器
driver = webdriver.Chrome()
# 3.打開注冊A頁面
url = "file:///" + os.path.abspath("./練習(xí)頁面/注冊A.html")
driver.get(url)
sleep(2)
# 4.使用tag_name復(fù)數(shù)形式定位 input標(biāo)簽
input_elements = driver.find_elements_by_tag_name("input")
# 查看結(jié)果類型
print(type(input_elements))
print(len(input_elements))
# 5.遍歷列表打印每個元素的源碼
for element in input_elements:
print(element.get_attribute("outerHTML"))
# 6.關(guān)閉瀏覽器
driver.quit()
'''
輸出結(jié)果:
<class 'list'>
16
<input type="textA" name="userA" id="userA" placeholder="賬號A" required="" value="">
<input type="password" name="passwordA" id="passwordA" placeholder="密碼A" value="">
<input type="telA" name="telA" id="telA" placeholder="電話A" class="telA" value="">
<input type="emailA" name="emailA" id="emailA" placeholder="電子郵箱A" value="">
......等等
'''
tag_name定位:
單數(shù)形式
當(dāng)頁面中如果定位的標(biāo)簽是唯一的,可以直接使用tag_name方法定位
如果所定位的標(biāo)簽在頁面中的索引位置是第一個,也可以用tag_name方法定位
復(fù)數(shù)形式
復(fù)數(shù)定位形式:driver.find_elements_XXX
復(fù)數(shù)定位,返回的列表類型數(shù)據(jù)
遍歷列表操作具體元素
5.by_link_text 定位
by_link_text通過超文本鏈接上的文字信息來定位元素,這種方式一般專門用于定位頁面上的超文本鏈接
例如打開百度首頁,定位點(diǎn)擊超鏈接地圖
<a?class="mnav"?name="tj_trmap"?>地圖</a>
使用link_text定位百度首頁地圖鏈接
'''
1.學(xué)習(xí)目標(biāo):
必須掌握selenium中超鏈接的定位方法
2.語法
link_text # 需要鏈接的全部文本
driver.find_element_by_link_text(全部文本)
3.需求
在頁面中,使用定位連接的方法,訪問百度網(wǎng)站,定位點(diǎn)擊超鏈接地圖。
'''
# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
import os
# 2.打開瀏覽器
driver = webdriver.Chrome()
# 3.打開頁面
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.使用link_text定位
'''
注意:
連接的全部文本,表示<a>標(biāo)簽中的全部內(nèi)容,有空格也要算。
如果有相同部分文本的元素,單數(shù)形式,定位第一個。
'''
linkText = driver.find_element_by_link_text("地圖")
print(linkText.get_attribute("outerHTML"))
# 5.關(guān)閉瀏覽器
driver.quit()
'''
輸出結(jié)果:
<a target="_blank" class="mnav c-font-normal c-color-t">地圖</a>
'''
復(fù)數(shù)形式:
# 定位一組標(biāo)超鏈接文本全部內(nèi)容相同的元素,很少用到。# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
# 2.打開瀏覽器
driver = webdriver.Chrome()
# 3.打開頁面
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.使用link_text定位
'''
注意:
連接的全部文本,表示<a>標(biāo)簽中的全部內(nèi)容,有空格也要寫。
'''
linkText = driver.find_elements_by_link_text("地圖")
# 5.遍歷列表打印每個元素的源碼
for element in linkText:
print(element.get_attribute("outerHTML"))
# 6.關(guān)閉瀏覽器
driver.quit()
'''
輸出結(jié)果:
<a target="_blank" class="mnav c-font-normal c-color-t">地圖</a>
'''
6.by_partial_link_text 定位
當(dāng)你不能準(zhǔn)確知道超鏈接上的文本信息或者只想通過一些關(guān)鍵字進(jìn)行匹配時,可以使 用by_partial_link_text這個方法來通過部分鏈接文字進(jìn)行匹配
例如打開百度首頁,定位點(diǎn)擊超鏈接<hao123>
<a target="_blank" class="mnav c-font-normal c-color-t">hao123</a>
使用partial_link_text方法定位百度首頁<hao123>鏈接
'''
1.學(xué)習(xí)目標(biāo):
必須掌握selenium中超鏈接的定位方法
2.語法
partial_link_text # 需要連接部分文本
driver.find_element_by_partial_link_text(部分文本)
部分文本必須是連續(xù)的文字(中可包含空格)
3.需求
在頁面中,使用定位連接的方法,訪問百度網(wǎng)站,定位點(diǎn)擊超鏈接<hao123>。
'''
# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
# 2.打開瀏覽器
driver = webdriver.Chrome()
# 3.打開頁面
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.使用by_partial_link_text定位
'''
注意:
連接的部分文本,表示<a>標(biāo)簽中的連續(xù)的部分內(nèi)容,之中有空格也要算。
如果有相同部分文本的元素,單數(shù)形式,定位第一個。
'''
pLinkText = driver.find_element_by_partial_link_text("ao1")
print(pLinkText.get_attribute("outerHTML"))
# 6.關(guān)閉瀏覽器
sleep(2)
driver.quit()
'''
輸出結(jié)果:
<a target="_blank" class="mnav c-font-normal c-color-t">hao123</a>
'''
復(fù)數(shù)形式:
# 定位一組標(biāo)超鏈接文本目標(biāo)內(nèi)容相同的元素,很少用到。# 1.導(dǎo)入selenium
from selenium import webdriver
from time import sleep
# 2.打開瀏覽器
driver = webdriver.Chrome()
# 3.打開頁面
url = "http://www.baidu.com"
driver.get(url)
sleep(2)
# 4.使用by_partial_link_text定位
'''
注意:
連接的部分文本,表示<a>標(biāo)簽中的連續(xù)的部分內(nèi)容,之中有空格也要算。
'''
pLinkText = driver.find_elements_by_partial_link_text("ao1")
# 5.遍歷列表打印每個元素的源碼
for element in pLinkText:
print(element.get_attribute("outerHTML"))
# 6.關(guān)閉瀏覽器
driver.quit()
'''
輸出結(jié)果:
<a target="_blank" class="mnav c-font-normal c-color-t">hao123</a>
'''
以上就是selenium的基礎(chǔ)元素定位,下次講解xpath和css定位方法,感興趣的可以關(guān)注下。
最后感謝每一個認(rèn)真閱讀我文章的人,看著粉絲一路的上漲和關(guān)注,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走!
軟件測試面試文檔
我們學(xué)習(xí)必然是為了找到高薪的工作,下面這些面試題是來自阿里、騰訊、字節(jié)等一線互聯(lián)網(wǎng)大廠最新的面試資料,并且有字節(jié)大佬給出了權(quán)威的解答,刷完這一套面試資料相信大家都能找到滿意的工作。
?
文章來源:http://www.zghlxwxcb.cn/news/detail-759644.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-759644.html
到了這里,關(guān)于Selenium元素定位全攻略,讓你輕松玩轉(zhuǎn)自動化測試!的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!