【问题标题】:Selenium CSS selector by id AND multiple classesSelenium CSS 选择器按 id 和多个类
【发布时间】:2013-01-13 09:01:56
【问题描述】:

第一次在这里使用 selenium,我想知道为什么:

final WebElement justAnId = findElement(By.cssSelector("#someId"));
final WebElement whatIWant = justAnId.findElement(
    By.cssSelector(".aClass.andAnother input[type=text]")
);

有效,但无效:

final WebElement whatIWant = findElement(By.cssSelector(
    "div#someId.aClass.andAnother input[type=text]"
));

虽然他们看起来和我一样,但我明白了:

org.openqa.selenium.NoSuchElementException: Unable to locate element:
{"method":"css selector","selector":"div#someId.aClass.andAnother input[type=text]"}

这是 Selenium 中的预期行为还是错误?我快速浏览了 Selenium 中的错误跟踪器,但我没有看到任何相关内容。在提出一个不需要的问题之前,我想在这里问一下。另外据我了解,它在 IE6 中不起作用,但谁在乎。这次运行我使用的是 firefox。

【问题讨论】:

    标签: css-selectors selenium-webdriver


    【解决方案1】:

    findElement() 在当前上下文中找到一个元素,这意味着您的第一个 sn-p 代码实际上是在找到一个与 .aClass.andAnother input[type=text] 匹配的元素,该元素包含在 #someId 中。具有该 ID 的元素可能包含也可能不包含这两个类; WebDriver 不假定您指的是相同的元素;只要它的祖先是#someId.aClass.andAnother,它就会找到input

    这与div#someId.aClass.andAnother input[type=text] 完全不同,后者在div#someId.aClass.andAnother 中查找任何input[type=text](即它是一个包含两者 ID 和类)。

    【讨论】:

    • 这个答案+1。作为健全性检查,每当您在 WebDriver 中遇到此类问题时,打开浏览器的 JavaScript 控制台(Firefox 的 Firebug、IE 的 F12 开发人员工具和 Chrome 的 WebKit 开发人员工具)并使用相同的 document.querySelector()在您的 WebDriver 代码中为您失败的选择器。如果选择器在 JavaScript 控制台中没有返回预期的元素,您可以确定它在 WebDriver 中永远不会返回。
    • 感谢您的回答和 cmets,我不知道我可以使用开发工具中的选择器,+1。任。
    【解决方案2】:

    其实这两者是完全不同的选择器。

    这是你的 cssSelector:

    div#someId.aClass.andAnother input[type=text]
    

    但你真正想写的是:

    div#someId .aClass.andAnother input[type=text]
    

    注意 ID 和类之间的空格。你需要那个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2019-05-27
      • 2011-08-04
      • 2012-02-15
      • 1970-01-01
      • 2012-10-07
      • 1970-01-01
      相关资源
      最近更新 更多