复合类名称不允许错误Webdriver

时间:2015-08-17 06:18:51

标签: selenium-webdriver

我收到以下错误:

  

“不允许使用复合类名称”

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

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"));

这是解决方法given in the Link,但仍没有成功。非常感谢您的帮助。

6 个答案:

答案 0 :(得分:36)

如果元素使用“By”:

,则可以访问该元素
from selenium.webdriver.common.by import By
driver.findElement(By.cssSelector(".alert.alert-success"));

答案 1 :(得分:5)

您可以使用

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

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

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

答案 2 :(得分:4)

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

1) css选择器

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

2)使用xpath

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

尝试避免使用xpath并改为使用css选择器。

答案 3 :(得分:1)

问题是因为Class name的查找方式有效。

您的代码类名称中的

class="alert alert-success"

如果班级名称有空格,您将收到上述错误。您可以使用Id,CSS,Xpath,正则表达式或任何其他元素查找器方法来解决问题。

您需要使用类名还是可以使用其他方法?如果您需要使用课程名称,请告诉我。

答案 4 :(得分:0)

任何元素的大部分时间类名属性都有类名组。 比如class ='alert alert-success另一个类名'

如果你正在使用css选择器,那么只需删除类名之间的空格并创建你的clas名称,如下所示: driver.findElement(By.cssSelector( “alert.alert-success.another.class.name”)

。 =&GT;代表类

=&GT;代表ID

用于CSS选择器。

答案 5 :(得分:0)

也可以使用类名来完成:

driver.find_element_by_class_name("alert")

driver.find_element_by_class_name("alert-success")

你可以从两个或多个以空格分隔的类名中选择任何一个类名,它可以正常工作。