zoukankan      html  css  js  c++  java
  • 【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():
    返回值类型:{0}
    返回值:
    {1}".format(type(ele),ele))
    #find_elements()
    eles = driver.find_elements_by_xpath('//a[@class="c-color-gray2"]')
    print("2.find_elements():
    返回值类型:{0}
    返回值:".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】

    微信公众号“粒粒的测试笔记

  • 相关阅读:
    简练软考知识点整理-项目定义活动过程
    简练软考知识点整理-规划进度管理
    简练软考知识点整理-控制范围
    软考考前注意事项
    简练软考知识点整理-确认范围管理
    数据库之表关系
    数据库引擎
    数据库概念
    IO模型
    异步回调,线程队列,协程
  • 原文地址:https://www.cnblogs.com/yllil/p/13155275.html
Copyright © 2011-2022 走看看