Elementen in Selenium klikken met JavaScript

1. Inleiding

In deze korte tutorial gaan we een eenvoudig voorbeeld bekijken van hoe te klikken en element in Selenium WebDriver te gebruiken met JavaScript.

Voor onze demo gebruiken we JUnit en Selenium om te openen //baeldung.com en zoek naar "Selenium" -artikelen.

2. Afhankelijkheden

Eerst voegen we de selenium-java en junit afhankelijkheden van ons project in de pom.xml:

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

3. Configuratie

Vervolgens moeten we WebDriver configureren. In dit voorbeeld gebruiken we de Chrome-implementatie:

@Before public void setUp () {System.setProperty ("webdriver.chrome.driver", nieuw bestand ("src / main / resources / chromedriver.mac"). GetAbsolutePath ()); driver = nieuwe ChromeDriver (); }

We gebruiken een methode die is geannoteerd met @Voordat om de eerste installatie voor elke test uit te voeren. Binnen zetten we de webdriver.chrome.driver eigenschap die de locatie van het Chrome-stuurprogramma definieert. Daarna instantiëren we de WebDriver voorwerp.

Als de test is voltooid, moeten we het browservenster sluiten. We kunnen het doen door de driver.close () statement in een methode geannoteerd met @Na. Dit zorgt ervoor dat het wordt uitgevoerd, zelfs als de test mislukt:

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

4. De browser openen

Nu kunnen we een testcase maken die onze eerste stap zal doen - open de website:

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

Hier gebruiken we de driver.get () methode om de webpagina te laden. Vervolgens verifiëren we de titel om er zeker van te zijn dat we op de juiste plek zijn.

5. Klikken op een element met JavaScript

Selenium wordt geleverd met een handig WebElement # klik methode die een klikgebeurtenis op een bepaald element oproept. Maar in sommige gevallen is klikactie niet mogelijk.

Een voorbeeld is als we op een uitgeschakeld element willen klikken. In dat geval, WebElement # klik gooit een IllegalStateException. In plaats daarvan kunnen we de JavaScript-ondersteuning van Selenium gebruiken.

Om dit te doen, is het eerste dat we nodig hebben het JavascriptExecutor. Omdat we de ChromeDriver implementatie, we kunnen het eenvoudig casten naar wat we nodig hebben:

JavascriptExecutor executor = (JavascriptExecutor) stuurprogramma;

Na het verkrijgen van het JavascriptExecutor, kunnen we zijn executeScript methode. De argumenten zijn het script zelf en een reeks scriptparameters. In ons geval roepen we de klikmethode op bij het eerste argument:

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

Laten we het nu samenvoegen tot een enkele methode die we zullen noemen clickElement:

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

En tot slot kunnen we dit toevoegen aan onze test:

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

6. Niet-klikbare elementen

Een van de meest voorkomende problemen die optreden bij het klikken op een element met JavaScript, is het uitvoeren van het klikscript voordat op het element kan worden geklikt. In deze situatie vindt de klikactie niet plaats, maar wordt de code wel uitgevoerd.

Om dit probleem op te lossen, moeten we de uitvoering vertragen totdat er geklikt kan worden. We kunnen gebruiken WebDriverWacht # tot om te wachten tot de knop wordt weergegeven.

Eerste, W.ebDriverWait object vereist twee parameters; de bestuurder en een time-out:

WebDriverWait wait = nieuwe WebDriverWait (driver, 5000); 

Dan bellen we tot, met het verwachte elementToBeClickable staat:

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

En als dat eenmaal succesvol is teruggekeerd, weten we dat we verder kunnen gaan:

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

Raadpleeg de officiële documentatie voor meer beschikbare conditiemethoden.

7. Conclusie

In deze tutorial hebben we geleerd hoe je met JavaScript op een element in Selenium klikt. Zoals altijd is de bron voor het artikel beschikbaar op GitHub.


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