Имя составного класса не допускается ошибка 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>

Ответ 1

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

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

Ответ 2

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

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

или

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

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

Ответ 3

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

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

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

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

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

Попробуйте избежать использования xpath и используйте селектора css.

Ответ 4

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

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

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

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

Ответ 5

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

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

. = > представляют класс

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

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

Ответ 6

Это также можно сделать, используя имя класса, например:

driver.find_element_by_class_name("alert")

или

driver.find_element_by_class_name("alert-success")

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