Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: RenaudОтветов: 2

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

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 для этого запуска.

selenium-webdrivercss-selectors

Ответы

Ответ 1 · рейтинг 8 · BoltClock

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, который содержит и идентификатор, и классы).

Ответ 2 · рейтинг 11 · mandu

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

Вот ваш cssSelector:

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

Но на самом деле вы хотели написать:

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

обратите внимание на пробел между идентификатором и классом. вам это нужно.

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы