Klikk på elementer i selen ved hjelp av JavaScript

1. Introduksjon

I denne korte opplæringen skal vi se på et enkelt eksempel på hvordan du klikker og element i Selenium WebDriver ved hjelp av JavaScript.

For vår demo bruker vi JUnit og Selenium til å åpne //baeldung.com og søk etter "Selen" -artikler.

2. Avhengigheter

Først legger vi til selen-java og junit avhengigheter til prosjektet vårt i pom.xml:

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

3. Konfigurasjon

Deretter må vi konfigurere WebDriver. I dette eksemplet bruker 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 bruker en metode som er merket med @Før for å gjøre det første oppsettet før hver test. Inne setter vi webdriver.chrome.driver eiendom som definerer kromdriverens plassering. Etter det instanserer vi WebDriver gjenstand.

Når testen er ferdig, bør vi lukke nettleservinduet. Vi kan gjøre det ved å plassere driver.close () uttalelse i en metode kommentert med @Etter. Dette sørger for at den blir utført selv om testen mislykkes:

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

4. Åpne nettleseren

Nå kan vi lage en testsak som vil gjøre vårt første skritt - åpne nettstedet:

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

Her bruker vi driver.get () metode for å laste inn nettsiden. Deretter bekrefter vi tittelen for å sikre at vi er på rett sted.

5. Klikk på et element ved hjelp av JavaScript

Selen kommer med en praktisk WebElement # klikk metode som påkaller en klikkhendelse på et gitt element. Men i noen tilfeller er ikke klikkhandling mulig.

Et eksempel er hvis vi vil klikke på et deaktivert element. I så fall, WebElement # klikk kaster en IllegalStateException. I stedet kan vi bruke Seleniums JavaScript-støtte.

For å gjøre dette er det første vi trenger JavascriptExecutor. Siden vi bruker ChromeDriver implementering, kan vi bare kaste det til det vi trenger:

JavascriptExecutor executor = (JavascriptExecutor) driver;

Etter å ha fått JavascriptExecutor, vi kan bruke den executeScript metode. Argumentene er selve skriptet og en rekke skriptparametere. I vårt tilfelle påkaller vi klikkmetoden på det første argumentet:

executor.executeScript ("argumenter [0]. klikk ();", element);

La oss nå sette det sammen til en enkelt metode som vi vil kalle clickElement:

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

Og til slutt kan vi legge til dette i testen:

@Test public void whenSearchForSeleniumArticles_thenReturnNotEmptyResults () {// ... load //baeldung.com WebElement searchButton = driver.findElement (By.className ("nav - menu_item_anchor")); clickElement (søkeknapp); WebElement searchInput = driver.findElement (By.id ("søk")); searchInput.sendKeys ("Selen"); WebElement seSearchResultsButton = driver.findElement (By.cssSelector (". Btn-search")); clickElement (seSearchResultsButton); }

6. Ikke-klikkbare elementer

Et av de vanligste problemene som oppstår når du klikker på et element ved hjelp av JavaScript, er å utføre klikkskriptet før elementet er klikkbart. I denne situasjonen vil ikke klikkhandlingen skje, men koden vil fortsette å utføres.

For å løse dette problemet, må vi holde utførelsen tilbake til klikket er tilgjengelig. Vi kan bruke WebDriver Vent # til å vente til knappen er gjengitt.

Først, WebDriverWait objektet krever to parametere; sjåføren og en timeout:

WebDriverWait vent = ny WebDriverWait (driver, 5000); 

Så ringer vi før, gir det forventede elementToBeClickable tilstand:

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

Og når det først er vellykket, vet vi at vi kan fortsette:

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

For mer tilgjengelige tilstandsmetoder, se den offisielle dokumentasjonen.

7. Konklusjon

I denne opplæringen har vi lært hvordan vi klikker på et element i Selen ved hjelp av JavaScript. Som alltid er kilden til artikkelen tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found