使用selenium.webdriver.common.by中的By相比于普通的find_element_by_...方法有什么目的和优势?例如:
driver.find_element_by_id('some_ID')
对比:
from selenium.webdriver.common.by import By
driver.find_element(By.ID, 'some_ID')
使用selenium.webdriver.common.by中的By相比于普通的find_element_by_...方法有什么目的和优势?例如:
driver.find_element_by_id('some_ID')
对比:
from selenium.webdriver.common.by import By
driver.find_element(By.ID, 'some_ID')
find_element()
似乎是一种类似于“私有”方法,它被find_element_by_...()
方法使用,也可能在页面对象中使用。find_element()
+By
而不是find_element_by_...()
的原因。id
值的变量。link_id = "some_id"
并且你可以使用它来定位元素,例如
my_link = driver.find_element_by_id(link_id)
id
属性被删除,您需要更新选择器并替换 my_link
中的 find_element_by_...()
方法。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")
而且my_link
保持完全不变
像上面的回答一样。当使用find_element_by_id
等方法时,我收到了已弃用的消息。因此,最好的方法是使用find_element()
。
在新版的Python中,find_element_by_...()
已被移除,因此只需使用 find_element()
+ By
。
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.
这归结于为您提供灵活性,选择在测试/框架中要跟踪的内容。您想将定位器作为字符串跟踪吗?还是想将定位器作为By对象跟踪?
Python
的答案。由于Python
+Selenium
和Java
+Selenium
存在几个差异,因此您的解释在这种情况下不适用。 - Andersson
driver.find_element("css selector", "[css='something']"
?看起来By大多数情况下是无用的,因为我们可以轻松地自己传入这些字符串。 - ArthurBy()
类中的所有变量都是简单字符串,您可以使用"id"
代替By.ID
,"xpath"
代替By.XPATH
。我认为这只是为了增加一点冗余并简化在 IDE 中的工作-当输入By.
时,您可以看到可用选项,例如在PyCharm
中。 - Anderssonfrom selenium.webdriver.common.by import By
应该要提一下。 - Nikhil VJ