2012-10-08 14 views
6

Ho lavorato con Selenium WebDriver per alcuni mesi e ho riscontrato un problema con un menu a discesa all'interno di un'app Web a cui sto lavorando .Selenium WebDriver - Impossibile chiudere selezionare menu a discesa in Chrome su Mac OS X

Quello che sta accadendo è che il test sta aprendo la pagina, verificando diversi elementi sulla pagina trovandoli e quindi assicurandone la visualizzazione. Dopo averlo fatto, c'è del testo inserito in campi diversi, quindi si fa clic sulla casella di selezione delle opzioni per aprire il menu a discesa. In seguito il test itera su tutte le opzioni nel menu a discesa finché non trova quello di cui ha bisogno, quindi fa clic su quell'opzione.

A questo punto l'opzione è selezionata ma il menu a discesa non è chiuso.

Ho provato a fare nuovamente clic sull'opzione, ma questo non ha alcun effetto, durante il resto del test si navigano altre pagine e il menu non si chiude.

Quindi la pagina viene salvata e quindi spostata da. Tuttavia il menu a discesa rimane fino a quando il browser non viene chiuso.

Questo è il codice della app:

<select id="options" name="options" class="options"> 
<option value="option1 (auto)">option1 (auto)</option> 
<option value="option2">option2</option> 
<option value="option3">option3</option> 
</select> 

risposta

1

ho risolto il problema con un lavoro in giro, in quanto questo è l'unico modo che ho trovato a lavorare.

Innanzitutto grazie eugene.polschikov per la tua risposta, anche se non ha risolto il problema, ha aperto un po 'gli occhi, non avevo alcuna conoscenza del generatore di azioni e mi ha dato alcune ottime idee sui test futuri. Grazie anche a tutti coloro che hanno letto questo e meditato su una possibile soluzione.

La soluzione ora disponibile è che la selezione non viene aperta. Il modo in cui funziona il codice è che aprirà l'elenco e troverà quello desiderato e farà clic su di esso, a questo punto la selezione non si chiuderà, quindi ora il codice non apre più la selezione in primo luogo, fa clic sull'opzione nascosta per selezionarlo, non al 100% quello che volevo, ma funziona.

Happy Programming, Ben.

2

la prima soluzione che vorrei provare è cliccare su opzioni di menu in modi diversi. L'API Selenium ci offre questa possibilità. 1) individuare ad es. selettori css degli elementi.

String cssOption1 = "select[id='options']>option[value='option1 (auto)']"; 
String cssOption2 = "select[id='options']>option[value='option2']"; 
String cssOption3 = "select[id='options']>option[value='option3']"; 

Inoltre, non dimenticare di verificare che hai trovato elementi correttamente ad esempio .in firepath, Firebug addon in ffox: proper location on web element in firepath

approccio 1

driver.findElement(By.cssSelector(cssOption2)).click(); 

approccio 2 utilizzando actions builder API

WebElement mnuOptionElement; 
mnuOptionElement = driver.findElement(By.cssSelector(cssOption2)); 
Actions builder = new Actions(driver); 
// Move cursor to the Main Menu Element 
builder.moveToElement(mnuOptionElement).click(); 

maggiori informazioni su azioni Builder è possibile ottenere here

approccio 3 usando jsExecutor cliccare sul elemento web. Funziona sempre per me in tutte le situazioni.

JavascriptExecutor js = (JavascriptExecutor) driver; 
     StringBuilder stringBuilder = new StringBuilder(); 
     stringBuilder.append("var x = $(\'"+cssOption2+"\');"); 
     stringBuilder.append("x.click();"); 
     js.executeScript(stringBuilder.toString()); 

Spero che questo funziona per voi

+0

Grazie per rispondere, ma non importa come faccio clic sul menu a discesa il menu rimane aperto. Ho anche provato diversi modi di cliccare sulla selezione per provare a chiuderla ma, ahimè, senza fortuna. –

+0

hai provato a fare clic su javascript? è il terzo che ho descritto. –

+0

Sì, non sono riuscito a scrivere su java script ma io e un collaboratore abbiamo provato JQuery e javascript e senza alcun risultato. Siamo sempre stati in grado di aprire la casella di rilascio, ma non siamo mai riusciti a chiuderla, abbiamo tentato di inviare tasti premuti e fare clic con il mouse, ma senza fortuna. Grazie ancora, –

0

Se un essere umano può premere Esc per uscire dalla casella combinata, è possibile farlo in selenio passando per l'elemento attivo:

from selenium.webdriver.common.keys import Keys 
    element = driver.switch_to.active_element 
    element.send_keys(Keys.ESCAPE)