10

第一次在这里使用 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。

4

2 回答 2

11

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

这是您的 cssSelector:

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

但你真正想写的是:

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

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

于 2013-07-19T01:28:17.827 回答
8

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

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

于 2013-01-29T17:45:38.603 回答