【问题标题】:What is the difference between find_element_by_tag_name and find_elements_by_tag_name?find_element_by_tag_name 和 find_elements_by_tag_name 有什么区别?
【发布时间】:2012-12-30 11:35:20
【问题描述】:

单数名称的函数和复数名称的函数有什么区别?

find_element_by_name
find_elements_by_name

find_element_by_tag_name
find_elements_by_tag_name

【问题讨论】:

    标签: selenium selenium-webdriver


    【解决方案1】:

    我对 python 和 selenium 不是很熟悉,但大多数 DOM 函数的行为方式都是一样的。

    find_element_by_name 应该返回一个 name 属性与 name 匹配的元素(找到的第一个实例)

    <input name="username" type="text" value="Enter Username" />
    

    find_elements_by_name 将返回匹配元素的集合/数组

    <input name="continue" type="submit" value="Login" />
    <input name="continue" type="button" value="Clear" />
    

    find_element_by_tag_name 将类似,仅返回具有匹配标签名称的元素的第一个实例。

    find_element_by_tag_name("a") // return the first anchor
    

    find_elements_by_tag_name 将再次返回匹配标签名称的集合/数组。

    如果可以链接这些命令,或者在存储的元素上调用它们,get_element(s)_* 函数的结果将与其调用的节点相关。

    <html>
      <body>
        <div>
           <a href="#1">Example 1</a>
           <a href="#2">Example 2</a>
        </div>
        <span>
           <a href="#3">Example 3</a>
           <a href="#4">Example 4</a>
        </span>
      </body>
    </html>
    

    例子

    find_element_by_tag_name("a") == Example 1

    find_element_by_tag_name("span").find_element_by_tag_name("a") == Example 3

    对集合/数组的迭代

    links = browser.find_elements_by_tag_name("a")
    
    for link in links
     # link should be a Selenium WebElement?
    

    如果有疑问,您可以转储整个结果以查看其中的内容。

    Debugging python object/properties

    【讨论】:

    • 现在根据您的说法,您何时使用find_elements_by_tag_name 并获取集合,那么您将如何迭代它以达到所需的anchor 元素?
    • 最后的编辑,我的python充其量是穷人。我建议你调试函数的结果,看看你得到了什么。
    • @NickSlash 你可能不太了解 Python 或 Selenium,但这是绝对正确的。还有另一个微妙的影响 - 如果启用了“隐式等待”并且项目不存在,find_element_by_whatever 可能需要长时间等待。但 find_elements_by_whatever 会立即返回,其中包含 0 个元素的集合。
    【解决方案2】:

    find_element_by_tag_name(tag_name)

    具有单数名称的函数是find_element_by_tag_name(tag_name),它通过标签名称找到一个元素并返回该元素。

    • 详情:

      find_element_by_tag_name(tag_name)        
      
      Args :  
          name - name of html tag (eg: h1, a, span)
      
      Returns :   
          WebElement - the element if it was found
      
      Raises :    
          NoSuchElementException - if the element wasn’t found
      
    • 用法:

      element = driver.find_element_by_tag_name("h1")
      

    find_elements_by_tag_name(tag_name)

    复数名称的函数是find_elements_by_tag_name(tag_name),它通过标签名称查找元素并返回一个列表。

    • 详情:

      find_elements_by_tag_name(tag_name): 
      
      Args :  
          name - name of html tag (eg: h1, a, span)
      
      Returns :
          list of WebElements - a list with elements if any was found. An empty list if not
      
    • 用法:

      elements = driver.find_elements_by_tag_name("h1")
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-03-14
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      • 2015-03-26
      相关资源
      最近更新 更多