Selenium webdriver By.className(“className”)和By.cssSelector(“class=”x27;className&“x27;””)返回selenium中不同数量的元素

Selenium webdriver By.className(“className”)和By.cssSelector(“class=”x27;className&“x27;””)返回selenium中不同数量的元素,selenium-webdriver,dom,Selenium Webdriver,Dom,我在学习Selenium时遇到了一个问题,我发现By.cssSelector(“[class='day']”)和By.className(“day”)返回的元素数不同,尽管它们是相同的 我发现,当我使用By.className(“day”)时,日历中的禁用日期也会被选中,而理想情况下它不应该被选中,因为这些禁用日期的类名是“old day”而不是“day” 驱动程序。获取(“”) driver.findElement(按名称(“旅行日期”))。单击() 列表元素=driver.findEleme

我在学习Selenium时遇到了一个问题,我发现By.cssSelector(“[class='day']”)和By.className(“day”)返回的元素数不同,尽管它们是相同的

我发现,当我使用By.className(“day”)时,日历中的禁用日期也会被选中,而理想情况下它不应该被选中,因为这些禁用日期的类名是“old day”而不是“day”

驱动程序。获取(“”)

driver.findElement(按名称(“旅行日期”))。单击()

列表元素=driver.findElements(By.cssSelector(“[class]) “日”]”)

List elements1=driver.findElements(By.className(“day”)

System.out.println(elements.size())

System.out.println(elements1.size())

预期:应返回30个元素。 实际:
使用Css选择器-我可以看到30,但使用Classname-我可以看到42。

我认为问题在于以下几点:

By.className(“cls”)
返回具有该类的元素,例如:

By.cssSelector(“[class='cls']”)
返回属性与引号中的表达式完全相同的元素,例如:

  • 没有别的了
注意:在你链接的网站上(打开日历后)检查了这一点,这似乎是真的:

  • $('.day')。长度
    ==42
  • $('[class=day]')。长度
    ==31

我认为问题在于:

By.className(“cls”)
返回具有该类的元素,例如:

By.cssSelector(“[class='cls']”)
返回属性与引号中的表达式完全相同的元素,例如:

  • 没有别的了
注意:在你链接的网站上(打开日历后)检查了这一点,这似乎是真的:

  • $('.day')。长度
    ==42
  • $('[class=day]')。长度
    ==31

感谢alx,根据selenium文档,这似乎是预期的行为。By org.openqa.selenium.By.className(字符串className)根据“class”属性的值查找元素。如果一个元素有多个类,那么这将与每个类匹配。例如,如果值为“one-two-onone”,则类名“one”和“two”将匹配。感谢alx,根据selenium文档,这似乎是预期的行为。By org.openqa.selenium.By.className(字符串className)根据“class”属性的值查找元素。如果一个元素有多个类,那么这将与每个类匹配。例如,如果值为“one-two-onone”,则类名“one”和“two”将匹配。