【Selenium】find_element()與find_elements()有什么區別?


 

Question:find_element()與find_elements()有什么區別?

Answer:find_element():只查找一個頁面元素,方法返回值為WebElement對象;

find_elements():查找頁面上所有滿足定位條件的元素,方法返回值為WebElement對象的列表。

 

我們可以從源碼webdriver.py中找到這2個方法的定義,可以更清晰的理解其含義,且官方推薦盡可能使用find_element_by_*/find_elements_by_*寫法:

def find_element(self, by=By.ID, value=None):
    """ Find an element given a By strategy and locator. Prefer the find_element_by_* methods when
    possible.

    :Usage:
        element = driver.find_element(By.ID, 'foo')

    :rtype: WebElement #返回WebElement """

def find_elements(self, by=By.ID, value=None):
    """ Find elements given a By strategy and locator. Prefer the find_elements_by_* methods when
    possible.

    :Usage:
        elements = driver.find_elements(By.CLASS_NAME, 'foo')

    :rtype: list of WebElement #返回WebElement的列表 """

疑問如果使用find_element()查找元素,但有多個元素滿足條件時,會出現什么情況?

解答:只返回所有滿足條件的元素列表的第1個元素。

舉例:百度首頁中以下7個鏈接都具有class="c-color-gray2"屬性,使用xpath測試時(表達式://a[@class="c-color-gray2"])有7個元素滿足條件。

而使用find_element()方法定位時則只返回了滿足條件的第1個元素對象。

 測試代碼

#coding:utf-8

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
#find_element()
ele = driver.find_element(By.XPATH,'//a[@class="c-color-gray2"]')
print("1.find_element():\n返回值類型:{0}\n返回值:\n{1}".format(type(ele),ele))
#find_elements()
eles = driver.find_elements_by_xpath('//a[@class="c-color-gray2"]')
print("2.find_elements():\n返回值類型:{0}\n返回值:".format(type(eles)))
for e in eles:
    print(e)
driver.quit()

運行結果

1.find_element():

返回值類型:<class 'selenium.webdriver.remote.webelement.WebElement'>

返回值:

<selenium.webdriver.remote.webelement.WebElement (session="12f8aa5f1d64d097bc959b5d8e251886", element="c36d66c6-7942-4140-a696-ea8f4c60e22f")>

2.find_elements():

返回值類型:<class 'list'>

返回值:

<selenium.webdriver.remote.webelement.WebElement (session="12f8aa5f1d64d097bc959b5d8e251886", element="c36d66c6-7942-4140-a696-ea8f4c60e22f")>

<selenium.webdriver.remote.webelement.WebElement (session="12f8aa5f1d64d097bc959b5d8e251886", element="be5ec9a0-67ce-41c2-a40b-9c1321cd6362")>

<selenium.webdriver.remote.webelement.WebElement (session="12f8aa5f1d64d097bc959b5d8e251886", element="eb05490a-b662-4a50-a4b2-34175eb898bb")>

<selenium.webdriver.remote.webelement.WebElement (session="12f8aa5f1d64d097bc959b5d8e251886", element="1e117461-8bb6-4456-ba0c-95b1c68f4f5d")>

<selenium.webdriver.remote.webelement.WebElement (session="12f8aa5f1d64d097bc959b5d8e251886", element="5f34913a-4122-4323-b0b3-e726194266c6")>

<selenium.webdriver.remote.webelement.WebElement (session="12f8aa5f1d64d097bc959b5d8e251886", element="1a73dfa7-cbcc-4b34-98a7-13dddb785656")>

<selenium.webdriver.remote.webelement.WebElement (session="12f8aa5f1d64d097bc959b5d8e251886", element="e0a3c03f-0464-4a9a-ab54-118228cacfe6")>

結果分析

從運行結果中可以看出find_element()返回了一個WebElement,若有多個元素滿足條件,則只返回第1個元素;

find_elements()則返回所有滿足定位條件的WebElement的列表。

 

【Ending】

微信公眾號“粒粒的測試筆記


免責聲明!

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



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