根据docs find_element_by_class_name“按类名查找此元素的子元素中的元素。”
目前尚不清楚此方法是否仅在WebElement
的直接子项或其整个子树中查找匹配元素。
答案 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中的一个设计选择,用于实现此目的,以及最大限度地显示并避免无意中搜索元素的整个子树。