Facendo clic su Elementi in selenio utilizzando JavaScript

1. Introduzione

In questo breve tutorial, daremo un'occhiata a un semplice esempio di come fare clic e creare elementi in Selenium WebDriver utilizzando JavaScript.

Per la nostra demo, utilizzeremo JUnit e Selenium per aprire //baeldung.com e cercare gli articoli "Selenium".

2. Dipendenze

Per prima cosa, aggiungiamo le dipendenze selenium -java e junit al nostro progetto nel pom.xml :

 org.seleniumhq.selenium selenium-java 3.141.59   junit junit 4.13 test 

3. Configurazione

Successivamente, dobbiamo configurare WebDriver. In questo esempio, useremo la sua implementazione di Chrome:

@Before public void setUp() { System.setProperty("webdriver.chrome.driver", new File("src/main/resources/chromedriver.mac").getAbsolutePath()); driver = new ChromeDriver(); }

Stiamo usando un metodo annotato con @Before per eseguire la configurazione iniziale prima di ogni test. All'interno stiamo impostando la proprietà webdriver.chrome.driver che definisce la posizione del driver chrome. Dopodiché, creiamo un'istanza dell'oggetto WebDriver .

Al termine del test dovremmo chiudere la finestra del browser. Possiamo farlo inserendo l' istruzione driver.close () in un metodo annotato con @After . Questo assicura che verrà eseguito anche se il test fallisce:

@After public void cleanUp() { driver.close(); }

4. Apertura del browser

Ora possiamo creare un test case che farà il nostro primo passo: apri il sito web:

@Test public void whenSearchForSeleniumArticles_thenReturnNotEmptyResults()  driver.get("//baeldung.com"); String title = driver.getTitle(); assertEquals("Baeldung 

Qui, utilizziamo il metodo driver.get () per caricare la pagina web. Successivamente, verifichiamo il suo titolo per assicurarci di essere nel posto giusto.

5. Fare clic su un elemento utilizzando JavaScript

Selenium viene fornito con un pratico metodo WebElement # click che richiama un evento clic su un dato elemento. Ma in alcuni casi l'azione di clic non è possibile.

Un esempio è se vogliamo fare clic su un elemento disabilitato. In tal caso, il clic WebElement # genera un'eccezione IllegalStateException . Invece, possiamo usare il supporto JavaScript di Selenium.

Per fare questo, la prima cosa di cui avremo bisogno è JavascriptExecutor . Dato che stiamo utilizzando l' implementazione di ChromeDriver , possiamo semplicemente trasmetterlo a ciò di cui abbiamo bisogno:

JavascriptExecutor executor = (JavascriptExecutor) driver;

Dopo aver ottenuto JavascriptExecutor , possiamo usare il suo metodo executeScript . Gli argomenti sono lo script stesso e un array di parametri dello script. Nel nostro caso, invochiamo il metodo click sul primo argomento:

executor.executeScript("arguments[0].click();", element);

Ora, mettiamolo insieme in un unico metodo che chiameremo clickElement :

private void clickElement(WebElement element) { JavascriptExecutor executor = (JavascriptExecutor) driver; executor.executeScript("arguments[0].click();", element); }

E infine, possiamo aggiungere questo al nostro test:

@Test public void whenSearchForSeleniumArticles_thenReturnNotEmptyResults() { // ... load //baeldung.com WebElement searchButton = driver.findElement(By.className("nav--menu_item_anchor")); clickElement(searchButton); WebElement searchInput = driver.findElement(By.id("search")); searchInput.sendKeys("Selenium"); WebElement seeSearchResultsButton = driver.findElement(By.cssSelector(".btn-search")); clickElement(seeSearchResultsButton); }

6. Elementi non cliccabili

Uno dei problemi più comuni che si verificano durante il clic su un elemento utilizzando JavaScript è l'esecuzione dello script di clic prima che l'elemento sia selezionabile. In questa situazione, l'azione del clic non verrà eseguita ma il codice continuerà a essere eseguito.

Per superare questo problema, dobbiamo trattenere l'esecuzione fino a quando il clic non è disponibile. Possiamo usare WebDriverWait # fino ad attendere fino al rendering del pulsante.

Innanzitutto, l' oggetto W ebDriverWait richiede due parametri; il driver e un timeout:

WebDriverWait wait = new WebDriverWait(driver, 5000); 

Quindi, chiamiamo fino a , dando la condizione elementToBeClickable prevista :

wait.until(ExpectedConditions.elementToBeClickable(By.className("nav--menu_item_anchor"))); 

E una volta che viene restituito con successo, sappiamo che possiamo procedere:

WebElement searchButton = driver.findElement(By.className("nav--menu_item_anchor")); clickElement(searchButton);

Per ulteriori metodi di condizione disponibili fare riferimento alla documentazione ufficiale.

7. Conclusione

In questo tutorial, abbiamo imparato come fare clic su un elemento in Selenium utilizzando JavaScript. Come sempre, la fonte dell'articolo è disponibile su GitHub.