如何避免Page Object中的复合类名错误?

时间:2013-07-23 11:11:19

标签: selenium selenium-webdriver pageobjects page-object-gem

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

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

如何使用有空格的类名。

例如:

class = "country name"

5 个答案:

答案 0 :(得分:16)

改为使用CSS选择器:

.country.name

重要的是要注意这个例子是错误的!如果"country name"是一个国家/地区的名称,那就是。类名不能包含空格。实际上,class属性是以空格分隔的类列表。这意味着如果你有一个类country name,它不是一个类,它是你的元素所属的两个不同的类 - 第一个是country,第二个是{{1 }}!

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

答案 1 :(得分: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']");

答案 2 :(得分:1)

您可以使用其中一个类名,例如

:class => 'country' 

:class => 'name'

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

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

:css => '.country.name'

以及:xpath:

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

两者都应该有效

答案 3 :(得分:0)

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

答案 4 :(得分:0)

您必须从类名中删除空格,在这种情况下,Selenium仍然应该理论找到您需要的元素,或者使用CSS选择器并将其与句点/完整组合停止将类名连接在一起。

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

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

您可以使用:

div.country.code

你可以让你的选择器更精细:

div[class='country code']