Selenium CSS选择器由id和多个类组成

时间:2013-01-29 17:40:01

标签: css-selectors selenium-webdriver

这里第一次使用硒,我想知道原因:

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中的bug跟踪器,但我没有看到任何相关内容。在提出一个不需要的问题之前,我想问一下这里。另据我所知,它在IE6中不起作用但是谁在乎。我正在使用firefox进行此次运行。

2 个答案:

答案 0 :(得分:11)

实际上两者是完全不同的选择器。

这是你的cssSelector:

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

但你真正想写的是:

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

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

答案 1 :(得分:8)

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

这与div#someId.aClass.andAnother input[type=text]完全不同,input[type=text]div#someId.aClass.andAnother 中只找到div (即它是包含的{{1}} ID和类。)