【问题标题】:Compound class names not permitted error Webdriver不允许复合类名错误Webdriver
【发布时间】:2015-11-09 16:56:21
【问题描述】:

我收到以下错误:

“不允许使用复合类名”

在尝试访问 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 的解决方法,但仍然没有成功。您的帮助将不胜感激。

【问题讨论】:

标签: selenium-webdriver


【解决方案1】:

如果元素有多个类,您可以使用“By”访问该元素:

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

【讨论】:

  • class="alert alert-success" 应转换为 ".alert.alert-success"
【解决方案2】:

也可以使用类名来完成,例如:

driver.find_element_by_class_name("alert")

driver.find_element_by_class_name("alert-success")

你可以从两个或多个用空格分隔的类名中选择任何一个类名,这样就可以了。

【讨论】:

    【解决方案3】:

    大多数时候,任何元素的类名属性都有一组类名。 like class= 'alert alert-success another class name'

    如果您使用 css 选择器,则只需删除类名之间的空格并创建您的类名,如下所示: driver.findElement(By.cssSelector(".alert.alert-success.another.class.name")

    。 => 代表类

    => 代表ID

    用于 CSS 选择器。

    【讨论】:

      【解决方案4】:

      问题在于按类名查找的工作方式。

      在你的代码类名中是class="alert alert-success"

      如果类名有空格,则会出现上述错误。您可以通过使用 Id、CSS、Xpath、正则表达式或任何其他元素查找方法来简单地解决此问题。

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

      【讨论】:

      • 我不必使用 ClassName Identifer。如果必须使用 ClassName,解决方案是什么?
      • 这是必须的。因为元素只有一个类名
      【解决方案5】:

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

      1) css 选择器

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

      2) 使用 xpath

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

      尽量避免使用 xpath 并改用 css 选择器。

      【讨论】:

        【解决方案6】:

        你可以使用

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

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

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

        【讨论】:

        • 这个解决方案对我有用。非常感谢。可能是什么原因 driver.findElement(By.cssSelector(".alert alert-success"));找不到元素?
        • 你必须像这样使用:.alert.alert-success
        猜你喜欢
        • 2015-04-15
        • 2013-03-19
        • 2020-11-04
        • 2018-05-19
        • 1970-01-01
        • 2015-10-08
        • 2019-04-30
        • 2019-12-08
        • 1970-01-01
        相关资源
        最近更新 更多