Selenium系列4-元素定位


前言

說起元素定位,一定是學習自動化測試繞不開的第一道關,無論是web端的UI自動化還是移動端的自動化,在需要首先對元素進行定位才可以完成對元素的操作已達成測試目的,在Selenium中,可以使用find_element(定位單個元素)或find_elements(定位多個元素)方法來定位元素。

Selenium元素定位常用API

在工作中我們常用的元素定位API一共有8種,我們先來了解以下6種,xpath和css_selector我們在后面的文章中單獨學習

通過id定位

說明

當所定位的元素具有id屬性時,我們可以使用by_id來定位該元素,id一般情況下在當前頁面中是唯一的。

語法

drivr.find_element_by_id(id)

示例

打開百度首頁,定位搜索框,查看頁面元素,可以看到搜索框元素的id為 kw

image-20210915151758333

代碼

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)

# 元素定位
el = driver.find_element_by_id('kw')
# 打印元素
print(el)
# 查看元素對應的源碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210915154738133

可以看到el是一個WebElement類型的對象

定位多個元素

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)

# 元素定位
els = driver.find_elements_by_id('kw')

# 查看返回結果的數據類型
print("數據類型", type(els))
print("元素個數", len(els))

# 遍歷結果,查看元素源碼
for i in els:
    print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210915161212582

可以看到返回數據的類型為list,元素個數為1個

通過name定位

說明

當所定位的元素具有id屬性時,我們可以使用by_name來定位該元素,name一般情況下在當前頁面中不是唯一的。

語法

drivr.find_element_by_name(name)

示例

打開百度首頁,定位搜索框,查看頁面元素,可以看到搜索框元素的name為 wd

image-20210915162228193

代碼

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)

# 元素定位
el = driver.find_element_by_name('wd')
# 打印元素
print(el)
# 查看元素對應的源碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210915154738133

可以看到el是一個WebElement類型的對象

定位多個元素

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)

# 元素定位
els = driver.find_elements_by_name('wd')

# 查看返回結果的數據類型
print("數據類型", type(els))
print("元素個數", len(els))

# 遍歷結果,查看元素源碼
for i in els:
    print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210915161212582

可以看到返回數據的類型為list,元素個數為1個

通過class_name定位

說明

當所定位的元素具有class屬性時,我們可以使用by_class_name來定位該元素,class屬性一般為多個值。

語法

drivr.find_element_by_class_name(class屬性值)

示例

打開百度首頁,定位搜索框,查看頁面元素,可以看到搜索框元素的class_name為 s_ipt

image-20210916152122253

代碼

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)

# 元素定位
el = driver.find_element_by_class_name('s_ipt')
# 打印元素
print(el)
# 查看元素對應的源碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210915154738133

可以看到el是一個WebElement類型的對象

定位多個元素

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)

# 元素定位
els = driver.find_elements_by_class_name('s_ipt')

# 查看返回結果的數據類型
print("數據類型", type(els))
print("元素個數", len(els))

# 遍歷結果,查看元素源碼
for i in els:
    print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210915161212582

可以看到返回數據的類型為list,元素個數為1個

通過tag_name定位

說明

通過元素的標簽名稱來定位,如果頁面中存在多個相同標簽,默認返回第一個標簽元素

語法

drivr.find_element_by_tag_name("標簽名")

示例

打開網易企業郵箱登錄界面,定位登錄按鈕,查看頁面元素,可以看到登錄按鈕的tag_name為 button

image-20210916154544887

代碼

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://qiye.163.com/login/"
driver.get(url)
sleep(2)

# 元素定位
el = driver.find_element_by_tag_name('button')
# 打印元素
print(el)
# 查看元素對應的源碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210916155003704

可以看到el是一個WebElement類型的對象

定位多個元素

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://qiye.163.com/login/"
driver.get(url)
sleep(2)

# 元素定位
els = driver.find_elements_by_tag_name('button')

# 查看返回結果的數據類型
print("數據類型", type(els))
print("元素個數", len(els))

# 遍歷結果,查看元素源碼
for i in els:
    print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210916155052862

可以看到返回數據的類型為list,元素個數為2個

說明

by_link_text通過超文本鏈接上的文字信息來定位元素,一般專門用於定位頁面上的超文本鏈接。

語法

drivr.find_element_by_link_text("全部文本")

示例

打開百度首頁,定位點擊超鏈接 新聞

image-20210916162710938

代碼

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)

# 元素定位
el = driver.find_element_by_link_text('新聞')
# 打印元素
print(el)
# 查看元素對應的源碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210916163157767

可以看到el是一個WebElement類型的對象

定位多個元素

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)

# 元素定位
els = driver.find_elements_by_link_text('新聞')

# 查看返回結果的數據類型
print("數據類型", type(els))
print("元素個數", len(els))

# 遍歷結果,查看元素源碼
for i in els:
    print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210916163131536

可以看到返回數據的類型為list,元素個數為1個

說明

當不確定超鏈接上的文本信息或者只想通過一些關鍵字進行匹配時,可以使用by_partial_link_text這個方法來通過部分鏈接文字進行匹配

可以使用精准或模糊匹配,如果使用模糊匹配最好使用能代表唯一的關鍵詞

如果有多個值,默認返回第一個值

語法

drivr.find_element_by_partial_link_text("部分文本")

示例

打開百度首頁,定位點擊超鏈接 hao123

image-20210916163652350

代碼

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)

# 元素定位
el = driver.find_element_by_partial_link_text('hao')
# 打印元素
print(el)
# 查看元素對應的源碼
print(el.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210916164000370

可以看到el是一個WebElement類型的對象

定位多個元素

# 導入selenium
from selenium import webdriver
from time import sleep

# 實例化瀏覽器對象
driver = webdriver.Chrome()

# 訪問被測網址
url = "https://www.baidu.com"
driver.get(url)
sleep(2)

# 元素定位
els = driver.find_element_by_partial_link_text('hao')

# 查看返回結果的數據類型
print("數據類型", type(els))
print("元素個數", len(els))

# 遍歷結果,查看元素源碼
for i in els:
    print(i.get_attribute('outerHTML'))
# 關閉瀏覽器
driver.quit()

輸出結果如下:

image-20210916164020208

可以看到返回數據的類型為list,元素個數為1個

參考

https://www.cnblogs.com/liuyuelinfighting/p/14925556.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM