复合类名称不允许错误Webdriver

Rag*_*uru 26 selenium-webdriver

我收到以下错误:

"不允许使用复合类名称"

尝试访问web元素时,元素的类名称之间有空格.Web元素的页面源如下所示.

driver.findElement(By.className("alert alert-success"));
Run Code Online (Sandbox Code Playgroud)

<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>
Run Code Online (Sandbox Code Playgroud)

我试图通过CSS路径找到元素,如下所示.但是这个元素无法搜索到.

driver.findElement(By.cssSelector(".alert alert-success"));
Run Code Online (Sandbox Code Playgroud)

这是链接中给出的解决方法,但仍然没有成功.非常感谢您的帮助.

小智 42

如果元素使用"By"有多个类,则可以访问该元素:

from selenium.webdriver.common.by import By
driver.findElement(By.cssSelector(".alert.alert-success"));
Run Code Online (Sandbox Code Playgroud)

  • class =“ alert alert-success”应该转换为“ .alert.alert-success” (2认同)

Pra*_*dey 6

您可以使用

driver.findElement(By.className("alert-success"));
Run Code Online (Sandbox Code Playgroud)

要么

driver.findElement(By.className("alert"));
Run Code Online (Sandbox Code Playgroud)

现在,selenium不支持多个类名.如果您的类名包含空格,WebDriver会将其视为"复合选择器".您可以使用cssSelector或id来选择webelement.


小智 5

如果必须使用类名,则可以使用以下方法:

1)CSS选择器

driver.findElement(By.cssSelector(".alert.alert-success");
Run Code Online (Sandbox Code Playgroud)

2)使用xpath

driver.findElement(By.xpath("//div[@class='alert alert-success']"))
Run Code Online (Sandbox Code Playgroud)

尝试避免使用xpath,而改用CSS选择器。