为什么使用find_element(By ...)而不是find_element_by_

时间:2017-04-11 20:18:40

标签: python selenium selenium-webdriver

使用来自selenium.webdriver.common.by而不是普通的find_element_by _...方法的目的和好处是什么?例如:

driver.find_element_by_id('some_ID')

VS

from selenium.webdriver.common.by import By
driver.find_element(By.ID, 'some_ID')

2 个答案:

答案 0 :(得分:2)

根据documentatio n find_element()似乎是{{1>}方法使用的“私有”方法,也可能用于{{ 3}}

因此,使用Page Object模式是您可能需要find_element_by_...() + find_element()而不是By的原因。

例如,您有一些包含元素“find_element_by_...()

的变量
id

并使用它将元素定位为

link_id = "some_id"

如果由于某种原因my_link = driver.find_element_by_id(link_id) 属性已从元素中删除,则您需要更新选择器并将id中的find_element_by_...()方法替换为

my_link

如果您使用link_class_name = "some_class_name" my_link = driver.find_element_by_class_name(link_class_name) ,那么您的初始定位器可能是

By

您将元素定位为

link_locator = (By.ID, "some_id")

如果my_link = find_element(*link_locator) 来源发生变化,您只需将HTML更新为

link_locator

link_locator = (By.CLASS_NAME, "some_class_name") 完全相同

答案 1 :(得分:0)

这两种方法都来自RemoteWebDriver类。

findElement(By.id()) requires you to created your own By.id instance.
findElementById(String) is a helper function that will generate the By.id
instance for you.

归结为为您提供选择所需内容的灵活性 跟踪你的测试/框架。 你想跟踪定位器作为字符串吗? 是否要将定位器跟踪为按对象?