What is the difference between "find_element_by_name('name')" and "find_element(By.NAME, 'name')"?

Solution 1:

They are the same, the find_element_by_name call find_element method and pass By.NAME to by arguments. This is the source code:

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)

All the find_element_by_* methods are call find_element method with different by arguments. You should go to see selenium webdriver class sourcecode for detail.

This is selenium official api doc. https://www.selenium.dev/selenium/docs/api/py/_modules/selenium/webdriver/remote/webdriver.html#WebDriver