首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"find_element_by_name('name')“和"find_element(By.NAME,'name')”有什么区别?

"find_element_by_name('name')“和"find_element(By.NAME,'name')”有什么区别?
EN

Stack Overflow用户
提问于 2022-01-15 02:32:47
回答 2查看 888关注 0票数 1

示例:

代码语言:javascript
复制
# method 1
from selenium import webdriver

PATH = '...'
driver = webdriver.Chrome(PATH)
driver.get('https://google.com')
driver.find_element_by_name('q').send_keys('test')
代码语言:javascript
复制
# method 2
from selenium import webdriver
from selenium.webdriver.common.by import By

PATH = 'c:\\Program Files (x86)\\chromedriver.exe'
driver = webdriver.Chrome(PATH)
driver.get('https://google.com')
driver.find_element(By.NAME, 'q').send_keys('test')

基本上,我想知道:

1--这两者之间有什么区别吗?如果有的话,他们是什么?

一般说来,这两者之间有什么区别吗?

代码语言:javascript
复制
find_element_by_class_name(el): find_element(By.CLASS_NAME, el); 

find_element_by_name(el): find_element(By.NAME, el)

3-为什么在执行第一个方法时会显示DeprecationWarning

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-15 22:24:34

正如@GuiHva还提到的那样,这两条线之间没有区别:

代码语言:javascript
复制
driver.find_element_by_name('q')

代码语言:javascript
复制
driver.find_element(By.NAME, 'q')

与当前版本的selenium4 Python客户端一样,引擎盖下的Find_element_by_name(姓名)仍然调用:

代码语言:javascript
复制
self.find_element(by=By.NAME, value=name)

但同时还有一个https://stackoverflow.com/questions/69875125/find-element-by-commands-are-deprecated-in-selenium/69875984#69875984

姓名()的当前实现如下:

代码语言:javascript
复制
def find_element_by_name(self, name) -> WebElement:
    """
    Finds an element by name.

    :Args:
     - name: The name of the element to find.

    :Returns:
     - WebElement - the element if it was found

    :Raises:
     - NoSuchElementException - if the element wasn't found

    :Usage:
        ::

            element = driver.find_element_by_name('foo')
    """
    warnings.warn(
        "find_element_by_* commands are deprecated. Please use find_element() instead",
        DeprecationWarning,
        stacklevel=2,
    )
    return self.find_element(by=By.NAME, value=name)

为什么这样的变化

作为@AutomatedTester 提及

我们的决定是简化跨语言的API,这就做到了这一点。

票数 1
EN

Stack Overflow用户

发布于 2022-01-15 02:46:49

它们是相同的,find_element_by_name调用find_element方法并将By.NAME传递给by参数。这是源代码:

代码语言:javascript
复制
def find_element_by_name(self, name):
    """
    Finds an element by name.

    :Args:
     - name: The name of the element to find.

    :Returns:
     - WebElement - the element if it was found

    :Raises:
     - NoSuchElementException - if the element wasn't found

    :Usage:
        element = driver.find_element_by_name('foo')
    """
    return self.find_element(by=By.NAME, value=name)

所有的find_element_by_*方法都是具有不同by参数的调用find_element方法。有关详细信息,您应该查看selenium webdriver类源代码。

这是selenium官方api文档。modules/selenium/webdriver/remote/webdriver.html#WebDriver

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70718458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档