Селектор Selenium CSS по id и нескольким классам

используя селен в первый раз здесь, мне было интересно, почему:

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? Я быстро заглянул в трекер ошибок в Селене, но я ничего не видел об этом. Я хотел спросить здесь, прежде чем поднимать вопрос, который не должен быть. Также насколько я понимаю, это не работает в IE6, но кого это волнует. Я использовал firefox для этого запуска.

2 ответов


findElement() находит элемент в текущем контексте, что означает, что ваш первый фрагмент кода действительно находит элемент, который соответствует .aClass.andAnother input[type=text], который находится внутри #someId. Элемент с этим идентификатором может содержать или не содержать два класса; WebDriver не предполагает, что вы ссылаетесь на один и тот же элемент; он просто находит input пока его предки #someId и .aClass.andAnother.

совсем div#someId.aClass.andAnother input[type=text], который находит все input[type=text] внутри div#someId.aClass.andAnother только (т. е. это div, содержащую и ID и классы).


На самом деле это два совершенно разных селектора.

вот ваш cssSelector:

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

но то, что вы действительно хотели написать, было:

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

обратите внимание на пространство между ID и class. вам нужно.