当我尝试在页面对象中使用具有空格class = "country name"
的类名时,我得到:
Compound class names not permitted Selenium::WebDriver::Error::UnknownError)
如何使用有空格的类名。
例如:
class = "country name"
答案 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']