这里第一次使用硒,我想知道原因:
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进行此次运行。
答案 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和类。)