2016-06-12 7 views
8

Ho il codice qui sotto che fa clic su un elemento per far comparire una schermata e copiare il testo in essoSelenio Non consentito

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

Tuttavia, quando ho cercato di ottenere selenium a cliccare sul pulsante all'interno di tale popup con

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

produce un messaggio di errore: invalid selector: Compound class names not permitted

Questo è il codice HTML che sto cercando di ottenere selenium per fare clic su. Il pulsante 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> 

Come dovrei scrivere el3 al fine di fare clic sul pulsante di chiusura?

+2

Avete visto http://stackoverflow.com/questions/10658907/selenium-python-find-element-by -class-name-stopped-working-from-v-2-2-to-2-21? Potrebbe aiutare. – Leon

+0

Il selenio non supporta 'BY.CLASS_NAME' con ** classe composta ** .. è necessario utilizzare' cssSelector' o 'XPath' per trovare' el3' qui ... –

+0

Possibile duplicato di [Come evitare il nome della classe composta errore nell'oggetto della pagina?] (http://stackoverflow.com/questions/17808521/how-to-avoid-compound-class-name-error-in-page-object) – Liam

risposta

15

Leon's comment porta alle informazioni corrette che i nomi di classi composte non sono più supportati. Quello che potresti fare invece è provare a usare selettori CSS. Nel tuo caso, la seguente riga di codice dovrebbe aiutare a ottenere l'elemento che si desidera:

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

Essa trova l'elemento con tutte e tre le classi (azione-btn, annullare e di allarme-display) in l'attributo class. Tieni presente che l'ordine delle classi non ha importanza qui e una qualsiasi delle classi può apparire ovunque nell'attributo della classe. Finché l'elemento ha tutte e tre le classi, sarà selezionato. Se si desidera che l'ordine delle classi da fissare, è possibile utilizzare il seguente XPath:

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

Grazie! questo risolve il mio problema Non sapevo che le classi composte non sono supportate .. –