使用来自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')
答案 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.
归结为为您提供选择所需内容的灵活性 跟踪你的测试/框架。 你想跟踪定位器作为字符串吗? 是否要将定位器跟踪为按对象?