2016-06-12 43 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

謝謝!這解決了我的問題。我不知道複合類不支持.. –

相關問題