WebElement.find_element_by_class_name仅在直接子项中搜索[WebDriver / Python]

时间:2015-08-10 11:31:04

标签: python selenium webdriver

根据docs find_element_by_class_name“按类名查找此元素的子元素中的元素。”

目前尚不清楚此方法是否仅在WebElement的直接子项或其整个子树中查找匹配元素。

3 个答案:

答案 0 :(得分:2)

正如文件所说,

按类名在此元素的子元素中查找元素。

如果您在 WebElement 上使用find_element_by_class_name,它只会找到父元素的子元素。

另一方面,如果您在驱动程序实例上使用它,它将找到该页面的所有匹配项。

答案 1 :(得分:1)

你可以真的做到......这取决于你如何构造初始的CSS选择器。

driver.findElements(By.cssSelector("table > tr")); // finds only TRs that are immediate children of a TABLE tag.
driver.findElements(By.cssSelector("table tr")); // finds *all* TRs that are children of a TABLE tag.

在使用CSS选择器时,我经常将此作为参考:http://www.w3.org/TR/selectors/#selectors。这两个案例描述在此列表的底部附近:

E F - E元素的F元素后代 - 后代组合子

E> F - E元素的F元素子元素 - 子组合子

答案 2 :(得分:0)

披露:这基本上只是对现有答案的合并,这两个答案都是单独有用的并且我投了赞成,以便更直接地回答问题并为将来的读者节省一些扫描时间

WebElement'按id / classname' api 仅在元素的直接孩子中搜索。这种行为在各种webdriver实现之间很常见,但没有特别详细记录。

搜索特定元素的整个子树的最佳和看似webdriver惯用的方法是使用css selector / xpath'的驱动程序查找元素。 api,而不是尝试链接WebElement findElement调用,首先查找父节点,然后搜索其子树作为单独的操作。

老实说,生成的代码更清晰 - css选择器(和xpath)对于读者而言比一系列此类调用更加简洁和优雅,实质上为您提供了相同的功能和更多的语法。

可能是将搜索限制在WebElement中的直接子项,并通过id / classname' api是api中的一个设计选择,用于实现此目的,以及最大限度地显示并避免无意中搜索元素的整个子树。