Составные имена классов не допускаются ошибка Webdriver

Я получаю следующую ошибку:

"Составные имена классов не разрешены"

При попытке доступа к веб-элементу, где-в имени класса элемента есть пробелы между ними. Источник страницы для веб-элемента приведен ниже.

driver.findElement(By.className("alert alert-success"));

<div class="alert alert-success" alert-dismissable"="" id="58417" style="display: none;">
   <button type="button" class="close hide-panel close-icon-58417" data-dismiss="alert" aria-hidden="true" style="display: inline-block;">×</button><span id="caret-58417" class="notification-caret caret-58417"></span>
   <div class="hide-panel close-icon-58417" id="58417" style="display: block;">
      <span class="glyphicon glyphicon-ok-sign"></span><strong>Success</strong> KeyLinks Updated Successfully
      <div class="notification-panel-body panel-body-58417">REST Invocation Success</div>
   </div>
</div>

Я попытался найти элемент по пути CSS, как показано ниже. Но элемент не доступен для поиска с этим.

driver.findElement(By.cssSelector(".alert alert-success"));

Это был обходной путь, указанный в ссылке, но все еще безуспешно. Ваша помощь будет высоко ценится.

6 ответов

Решение

Вы можете получить доступ к элементу, если у него есть несколько классов, используя "By":

from selenium.webdriver.common.by import By
driver.findElement(By.cssSelector(".alert.alert-success"));

Ты можешь использовать

driver.findElement(By.className("alert-success"));

или же

driver.findElement(By.className("alert"));

Как сейчас, селен не поддерживает множественное имя класса. Если имя вашего класса содержит пробел, WebDriver увидит его как "составной селектор". Вы можете использовать cssSelector или id для выбора веб-элемента.

Если необходимо использовать имя класса, вы можете использовать следующие способы:

1) селекторы css:

driver.findElement(By.cssSelector(".alert.alert-success");

2) используя xpath

driver.findElement(By.xpath("//div[@class='alert alert-success']"))

Старайтесь избегать xpath и используйте вместо этого селекторы CSS.

Проблема заключается в том, как работает поиск по имени класса.

в вашем коде имя класса class="alert alert-success"

Если имя класса имеет пробел, вы получите вышеуказанную ошибку. Вы можете просто избавиться от проблемы, используя Id, CSS, Xpath, регулярные выражения или любой другой метод поиска элементов.

Вам нужно использовать имя класса или вы можете использовать другой метод? Дайте мне знать, если вам нужно использовать имя класса.

Это также можно сделать с помощью имени класса, например:

driver.find_element_by_class_name("alert")

или же

driver.find_element_by_class_name("alert-success")

Вы можете выбрать любое имя класса из двух или более имен классов, разделенных пробелами, это будет работать просто отлично.

В большинстве случаев атрибут имени класса любого элемента имеет группы имен классов. вроде class = 'alert alert-success, другое имя класса'

если вы используете селектор css, просто удалите пробелы между именами классов и создайте свое имя класса, как показано ниже: driver.findElement(By.cssSelector(".alert.alert-success.another.class.name")

, => представлять класс

=> представлять идентификатор

для селектора CSS.

Другие вопросы по тегам