2014-11-15 19 views
6

Sono in grado di verificare se un elemento esiste o meno e se viene visualizzato o meno, ma non riesco a trovare un modo per vedere se è "selezionabile" (Non parlando circa disabili).Verifica se l'elemento è selezionabile in selenio

Il problema è che spesso quando si riempie un modulo Web, l'elemento desiderato può essere sovrapposto a un div durante il caricamento. Il div stesso è piuttosto difficile da rilevare in quanto è id, nome e anche il css è flessibile. Quindi sto cercando di rilevare se un campo di input può essere 'cliccato' o 'riempito'. Quando il div overlaying è presente, il campo non può essere compilato da un utente normale (poiché il div si sovrapporrà al campo di input e non permetterà all'utente di riempirlo) ma può essere riempito dal selenio. Voglio impedirlo e permettere solo al selenio di riempirlo una volta che l'utente possa riempirlo.

risposta

8

È possibile wait for the element to be clickable:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Firefox() 
driver.get("http://somedomain") 

element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "myDynamicElement")) 
) 

In alternativa, è possibile seguire il EAFP principle e catturare un'eccezione viene sollevata da click():

from selenium.common.exceptions import WebDriverException 

try: 
    element.click() 
except WebDriverException: 
    print "Element is not clickable" 
+1

Sembra che nessuno dei lavori di cui sopra. Bianco l'overlay è ancora presente, l'attesa da elemento_to_be_clicabile lo consentirà comunque. Non vengono lanciate eccezioni quando tento di fare clic sull'elemento inutilizzabile. –

+1

puoi per favore condividere le seguenti informazioni: 1). Codice sorgente HTML 2 correlato.) Versione collegamento 3). Nome browser e versione –

+0

@AayushAgrawal bene, quindi non è facile dire altro sul tuo problema fino a quando non ci provi noi stessi. Fornisci il codice che hai attualmente incluso il sito target su cui stai testando (se possibile). – alecxe

1

È possibile utilizzare webElement.isEnabled() e webElement.isDisplayed() metodi prima di eseguire qualsiasi operazione sul campo di input ...

Spero che questo possa risolvere si problema ...

Altrimenti, si può anche mettere un ciclo per controllare sopra 2 condizioni e se queste sono vere è possibile specificare il testo di input e di nuovo si può trovare lo stesso elemento e si può ottenere il testo del webelement e confrontare quel testo con il testo inserito. Se quelle partite puoi uscire dal giro.

0

a fare clic su un (per il selenio) elemento irraggiungibile io uso alwas:

public void clickElement(WebElement el) throws InterruptedException { 
    ((JavascriptExecutor) driver).executeScript("arguments[0].click();", el); 
}