11

当我尝试使用class = "country name"在页面对象中有空格的类名时,我得到:

Compound class names not permitted Selenium::WebDriver::Error::UnknownError)

如何使用有空格的类名。

例如:

class = "country name"
4

5 回答 5

18

改用 CSS 选择器:

.country.name

需要注意的重要一点是,这个例子是错误的!如果"country name"是一个国家的名字,那就是。类名中不能有空格。实际上,该class属性是一个以空格分隔的类列表。这意味着如果你有一个类country name,它不是一个类,而是你的元素所属的两个country不同的类——第一个是,第二个是name

因此,修复你的课程,如果他们错了。如果不是,请使用 CSS 选择器,这是匹配多个类的唯一可靠方法(除了非常长且复杂的 XPath 表达式)。不要使用简单的 XPath 表达式或带有天真的属性比较的 CSS 选择器(//*[@class='country name']*[class='country name']),这是完全错误的。

于 2013-07-23T12:44:58.760 回答
3

你可以用这个

By.cssSelector("*[class^='classname']");

^ is for if you entering beginning of the class name, 
$ is for if you entering ending of the class name usage example below with sample class name: tech random corner text_left

By.cssSelector("*[class^='tech']");
By.cssSelector("*[class$='text_left']");
于 2014-12-15T13:16:07.060 回答
2

您可以使用这些类名之一,例如

:class => 'country' 

或者

:class => 'name'

如果它不能帮助你,那么你应该切换到使用其他类型的选择器 :css 或 :xpath

但请注意,如果是 :css 你写:

:css => '.country.name'

如果是 :xpath:

:xpath => '//div[@class='country code']

两者都应该工作

于 2014-02-03T10:35:08.717 回答
0

您将不得不从类名中删除空格,在这种情况下,Selenium理论上仍应找到您需要的元素,或者使用 CSS 选择器并将其与句点/句号结合起来以将类名连接在一起。

即,使用 CSS 选择器来定位它:

<div class="country code"></div>

你可以使用:

div.country.code

或者你可以让你的选择器更精细一点:

div[class='country code']
于 2013-07-23T12:22:07.050 回答
0

如果您的类名中有空格,您将收到此错误。一种避免的方法是创建一个用于标识元素的 xpath。如果您显示 html,我可以创建 xpath。还可以尝试使用类名,因为多个对象将具有相同的类名。

于 2013-07-23T11:26:35.753 回答