By.className(“ classname”)和By.cssSelector(“ [class ='classname']”)返回硒中不同数量的元素

时间:2019-06-23 00:56:44

标签: selenium-webdriver dom

我正在学习Selenium,遇到一个问题,即使By.cssSelector(“ [class ='day']”)和By.className(“ day”)都返回不同数量的元素,一样。

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

driver.get(“ https://www.path2usa.com/travel-companions”);

driver.findElement(By.name(“ travel_date”))。click();

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

列出elements1 = driver.findElements(By.className(“ day”));

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

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

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

1 个答案:

答案 0 :(得分:0)

我认为问题出在以下方面:

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

  • <span class="cls">
  • <span class="cls other values here">
  • <span class="any-combination cls of-classes">

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

  • <span class="cls">
  • 没有别的

注意:只需在您链接的网站上检查(打开日历后),这似乎是真的:

  • $('.day').length == 42
  • $('[class=day]').length == 31