2016-06-12 45 views
8

我有下面的代码是一个元素上点击,弹出一个屏幕和它硒化合物类名称不允许

el1 = driver.find_element_by_id("keyDev-A") 
el1.click() 
el2 = driver.find_element_by_class_name("content") 
print(el2.text) 

但是复制的文本,当我试图让selenium点击该按钮与

el3 = driver.find_element(By.CLASS_NAME, "action-btn cancel alert-display") 
el3.click() 

该弹出式内它产生的错误信息:invalid selector: Compound class names not permitted

这是我试图让的HTML 10点击。 Close按钮。

<div class="nav"> 
    <span class="action-btn confirm prompt-display">Confirm</span> 
    <span class="action-btn cancel prompt-display">Cancel</span> 
    <span class="action-btn cancel alert-display">Close</span> 
</div> 

我应该怎么写el3才能点击关闭按钮?

+2

你见过http://stackoverflow.com/questions/10658907/selenium-python-find-element-by -class-name-stopped-working-from-v-2-2-to-2-21?它可能有帮助。 – Leon

+0

Selenium不支持具有**复合类**的'BY.CLASS_NAME' ..您需要在这里使用'cssSelector'或'XPath'来查找'el3' ... –

+0

[如何避免复合类名称页面对象错误?](http://stackoverflow.com/questions/17808521/how-to-avoid-compound-class-name-error-in-page-object) – Liam

回答

15

Leon's comment导致不再支持复合类名称的正确信息。你可以做的是尝试使用CSS选择器。在你的情况,下面的代码行应该可以帮助你得到你想要的元素:

el3 = driver.find_element_by_css_selector(".action-btn.cancel.alert-display") 

它发现的元素与所有三个类别(动作BTN,取消和报警显示)在类属性。请注意,这些类的顺序并不重要,任何类都可能出现在类属性的任何地方。只要元素具有全部三个类别,它就会被选中。 如果你想成为固定的类的顺序,可以使用以下XPath:

el3 = driver.find_element_by_xpath("//*[@class='action-btn cancel alert-display']") 
+1

谢谢!这解决了我的问题。我不知道复合类不支持.. –

相关问题