Cliquer sur des éléments dans Selenium à l'aide de JavaScript

1. Introduction

Dans ce court didacticiel, nous allons jeter un œil à un exemple simple de la façon de cliquer et d'élément dans Selenium WebDriver à l'aide de JavaScript.

Pour notre démo, nous utiliserons JUnit et Selenium pour ouvrir //baeldung.com et rechercher des articles «Selenium».

2. Dépendances

Tout d'abord, nous ajoutons les dépendances selenium-java et junit à notre projet dans le pom.xml :

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

3. Configuration

Ensuite, nous devons configurer WebDriver. Dans cet exemple, nous utiliserons sa mise en œuvre Chrome:

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

Nous utilisons une méthode annotée avec @Before pour faire la configuration initiale avant chaque test. À l'intérieur, nous définissons la propriété webdriver.chrome.driver définissant l'emplacement du pilote Chrome. Après cela, nous instancions l' objet WebDriver .

Lorsque le test est terminé, nous devons fermer la fenêtre du navigateur. Nous pouvons le faire en plaçant l' instruction driver.close () dans une méthode annotée avec @After . Cela garantit qu'il sera exécuté même si le test échoue:

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

4. Ouverture du navigateur

Maintenant, nous pouvons créer un cas de test qui fera notre première étape - ouvrez le site Web:

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

Ici, nous utilisons la méthode driver.get () pour charger la page Web. Ensuite, nous vérifions son titre pour nous assurer que nous sommes au bon endroit.

5. Cliquer sur un élément à l'aide de JavaScript

Sélénium est livré avec un outil pratique WebElement # clic méthode qui appelle un événement de clic sur un élément donné. Mais dans certains cas, l'action de clic n'est pas possible.

Un exemple est si nous voulons cliquer sur un élément désactivé. Dans ce cas, WebElement # click lève une IllegalStateException . Au lieu de cela, nous pouvons utiliser le support JavaScript de Selenium.

Pour ce faire, la première chose dont nous aurons besoin est le JavascriptExecutor . Puisque nous utilisons l' implémentation ChromeDriver , nous pouvons simplement la convertir en ce dont nous avons besoin:

JavascriptExecutor executor = (JavascriptExecutor) driver;

Après avoir obtenu le JavascriptExecutor , nous pouvons utiliser sa méthode executeScript . Les arguments sont le script lui-même et un tableau de paramètres de script. Dans notre cas, nous invoquons la méthode click sur le premier argument:

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

Maintenant, mettons-le ensemble en une seule méthode que nous appellerons clickElement :

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

Et enfin, nous pouvons ajouter ceci à notre 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. Éléments non cliquables

L'un des problèmes les plus courants survenant lors du clic sur un élément à l'aide de JavaScript est l'exécution du script de clic avant que l'élément ne soit cliquable. Dans cette situation, l'action de clic ne se produira pas mais le code continuera à s'exécuter.

Pour surmonter ce problème, nous devons retarder l'exécution jusqu'à ce que le clic soit disponible. Nous pouvons utiliser WebDriverWait # jusqu'à ce que le bouton soit rendu.

Tout d'abord, l' objet W ebDriverWait nécessite deux paramètres; le pilote et un timeout:

WebDriverWait wait = new WebDriverWait(driver, 5000); 

Ensuite, nous appelons jusqu'à , en donnant la condition elementToBeClickable attendue :

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

Et une fois que cela revient avec succès, nous savons que nous pouvons continuer:

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

Pour plus de méthodes de condition disponibles, reportez-vous à la documentation officielle.

7. Conclusion

Dans ce didacticiel, nous avons appris à cliquer sur un élément dans Selenium à l'aide de JavaScript. Comme toujours, la source de l'article est disponible à l'adresse over sur GitHub.