Klik på elementer i selen ved hjælp af JavaScript

1. Introduktion

I denne korte vejledning skal vi se på et simpelt eksempel på, hvordan man klikker og element i Selen WebDriver ved hjælp af JavaScript.

Til vores demo bruger vi JUnit og Selenium til at åbne //baeldung.com og søg efter "Selen" -artikler.

2. Afhængigheder

Først tilføjer vi selen-java og junit afhængigheder af vores projekt i pom.xml:

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

3. Konfiguration

Dernæst skal vi konfigurere WebDriver. I dette eksempel bruger vi Chrome-implementeringen:

@Før offentlig ugyldig setUp () {System.setProperty ("webdriver.chrome.driver", ny fil ("src / main / resources / chromedriver.mac"). GetAbsolutePath ()); driver = ny ChromeDriver (); }

Vi bruger en metode, der er kommenteret med @Før for at udføre den oprindelige opsætning før hver test. Inde sætter vi ind webdriver.chrome.driver ejendom, der definerer chrome-driverens placering. Derefter instantierer vi WebDriver objekt.

Når testen er afsluttet, skal vi lukke browservinduet. Vi kan gøre det ved at placere driver.close () erklæring i en metode, der er kommenteret med @Efter. Dette sikrer, at den bliver udført, selvom testen mislykkes:

@Efter offentlig ugyldig cleanUp () {driver.close (); }

4. Åbning af browseren

Nu kan vi oprette en test sag, der vil gøre vores første skridt - åbn hjemmesiden:

@Test offentlig ugyldig nårSearchForSeleniumArticles_thenReturnNotEmptyResults () driver.get ("// baeldung.com"); String title = driver.getTitle (); assertEquals ("Baeldung 

Her bruger vi driver.get () metode til at indlæse websiden. Dernæst verificerer vi dens titel for at sikre, at vi er på det rette sted.

5. Klik på et element ved hjælp af JavaScript

Selen kommer med et praktisk WebElement # klik metode der påberåber sig en klikhændelse på et givet element. Men i nogle tilfælde er klikhandling ikke mulig.

Et eksempel er, hvis vi vil klikke på et deaktiveret element. I det tilfælde, WebElement # klik kaster en IllegalStateException. I stedet kan vi bruge Seleniums JavaScript-support.

For at gøre dette er den første ting, vi har brug for, JavascriptExecutor. Da vi bruger ChromeDriver implementering, kan vi simpelthen kaste det til det, vi har brug for:

JavascriptExecutor executor = (JavascriptExecutor) driver;

Efter at have fået JavascriptExecutor, vi kan bruge det executeScript metode. Argumenterne er selve scriptet og en række script-parametre. I vores tilfælde påkalder vi klikmetoden på det første argument:

eksekutor.executeScript ("argumenter [0]. klik ();", element);

Lad os nu sætte det sammen til en enkelt metode, som vi kalder klik på Element:

privat ugyldigt clickElement (WebElement-element) {JavascriptExecutor eksekutor = (JavascriptExecutor) driver; eksekutor.executeScript ("argumenter [0]. klik ();", element); }

Og endelig kan vi tilføje dette til vores test:

@Test offentlig ugyldig, nårSearchForSeleniumArticles_thenReturnNotEmptyResults () {// ... load //baeldung.com WebElement searchButton = driver.findElement (By.className ("nav - menu_item_anchor")); clickElement (søgeknap); WebElement searchInput = driver.findElement (By.id ("search")); searchInput.sendKeys ("Selen"); WebElement seSearchResultsButton = driver.findElement (By.cssSelector (". Btn-search")); clickElement (seSearchResultsButton); }

6. Ikke-klikbare elementer

Et af de mest almindelige problemer, der opstår, når du klikker på et element ved hjælp af JavaScript, er at udføre klik-scriptet, før elementet kan klikkes. I denne situation sker der ikke klikhandling, men koden fortsætter med at udføres.

For at løse dette problem er vi nødt til at holde udførelsen tilbage, indtil klikningen er tilgængelig. Vi kan bruge WebDriver Vent # indtil at vente, indtil knappen gengives.

Først, WebDriverWait objekt kræver to parametre; føreren og en timeout:

WebDriverWait vent = ny WebDriverWait (driver, 5000); 

Så ringer vi så længe, giver det forventede elementToBeClickable tilstand:

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

Og når det først vender tilbage, ved vi, at vi kan fortsætte:

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

For mere tilgængelige tilstandsmetoder henvises til den officielle dokumentation.

7. Konklusion

I denne vejledning har vi lært, hvordan man klikker på et element i Selen ved hjælp af JavaScript. Som altid er kilden til artiklen tilgængelig på GitHub.