【问题标题】:By.className("classname") and By.cssSelector("[class = 'classname']") returns different number of elements in seleniumBy.className("classname") 和 By.cssSelector("[class = 'classname']") 在 selenium 中返回不同数量的元素
【发布时间】:2019-11-05 07:07:58
【问题描述】:

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

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

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

driver.findElement(By.name("travel_date")).click();

列表元素 = driver.findElements(By.cssSelector("[class '天']"));

列出元素1 = driver.findElements(By.className("day"));

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

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

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

【问题讨论】:

    标签: selenium-webdriver dom


    【解决方案1】:

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

    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

    【讨论】:

    • 感谢 alx,这似乎是 selenium 文档的预期行为。通过 org.openqa.selenium.By.className(String className) 根据“class”属性的值查找元素。如果一个元素有多个类,那么这将匹配每个类。例如,如果值为“one two onone”,则类名“one”和“two”将匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多