我只是在读this documentation here,但很好奇:在这种情况下,公共方法和私有方法有什么区别?
要查找多个元素(这些方法将返回一个列表):
find_elements_by_name
find_elements_by_xpath
find_elements_by_link_text
find_elements_by_partial_link_text
find_elements_by_tag_name
find_elements_by_class_name
find_elements_by_css_selector
除了上面给出的公共方法外,还有两个私有方法可能对页面对象中的定位器很有用。这是两个私有方法:find_element和find_elements。
我不明白为什么其中一些是公共方法,而另一些是私有方法,并且在任何地方都没有解释。
通过测试,我注意到MESSAGE_ID DATE_OF_OPERATION MESSAGE
1000 20180530 AABC
1001 20180622 XXYZ
的公共选择器和私有选择器有所不同。
FirefoxWebElement
返回 find_element_by_xpath('//whatever')
<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="234a0c66-870f-4fee-92b5-8d10541f2d2d", element="3275635e-614d-42da-95ac-306b02743bec")>
session="234a0c66-870f-4fee-92b5-8d10541f2d2d"
element="3275635e-614d-42da-95ac-306b02743bec"
返回 find_element(By.XPATH, '//whatever')
<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="c792073f-08b3-4519-a563-0f1e272a17e7", element="b61a6d2d-2c35-4872-a8e0-2649c189829b")>
session="c792073f-08b3-4519-a563-0f1e272a17e7"
element="b61a6d2d-2c35-4872-a8e0-2649c189829b"
会有所不同,但是为什么它会为session
返回不同的值?! 答案 0 :(得分:1)
如果您查看find_element_by_xpath
def find_element_by_xpath(self, xpath):
return self.find_element(by=By.XPATH, value=xpath)
它使用find_element
方法。现在为什么find_element
被记录为私有?好几件事
find_element_by_xpath
的源代码以及使用find_element(By.XPATH, "//div")
的某些源代码时,您将如何查找?令人困惑,所以最好是保持一致find_element_by_xpath
明确说明了意图find_element
代替find_element_by_XXXX
吗?为什么不呢?在我的硒助手库中,我只使用它。所以我的想法是一样的,这些代码的原始贡献者可能会说出他的意图是将方法私有化
答案 1 :(得分:0)
有两种获取Web元素的方法:
element = driver.find_element_by_id("some static id")
和:
element = driver.find_element(By.ID, 'some static id')
或多或少,他们俩都返回了网络元素。
因此,find_element()
是一种私有方法,具有一些优点,例如:
如果要通过 CSS_SELECTOR 或 XPATH 查找新版本的同一元素,请使用
您将执行以下操作:
element = driver.find_element_by_css_selector("some css selector")
,但对于find_element()私有方法:
element = driver.find_element(By.CSS_SELECTOR, 'some css selector')
如官方文档所述:私有方法,可能对页面对象中的定位器有用。
页面对象是指项目的可维护性,您将在INI文件或Page工厂中找到定位符。因此,如果需要在进行回归或其他操作时更改某些内容,则可以使用Private方法,只需在一个位置更改值即可。