Klicken Sie mit JavaScript auf Elemente in Selen

1. Einleitung

In diesem kurzen Tutorial sehen wir uns ein einfaches Beispiel für das Klicken und Elementieren in Selenium WebDriver mit JavaScript an.

Für unsere Demo verwenden wir JUnit und Selenium, um //baeldung.com zu öffnen und nach "Selenium" -Artikeln zu suchen.

2. Abhängigkeiten

Zuerst fügen wir die Selenium-Java- und Junit- Abhängigkeiten zu unserem Projekt in der Datei pom.xml hinzu :

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

3. Konfiguration

Als nächstes müssen wir WebDriver konfigurieren. In diesem Beispiel verwenden wir die Chrome-Implementierung:

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

Wir verwenden eine mit @Before kommentierte Methode , um die Ersteinrichtung vor jedem Test durchzuführen. Im Inneren legen wir die Eigenschaft webdriver.chrome.driver fest , die den Speicherort des Chrome-Treibers definiert. Danach instanziieren wir das WebDriver- Objekt.

Wenn der Test beendet ist, sollten wir das Browserfenster schließen. Wir können dies tun, indem wir die Anweisung driver.close () in eine mit @After annotierte Methode einfügen . Dies stellt sicher, dass es auch dann ausgeführt wird, wenn der Test fehlschlägt:

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

4. Öffnen Sie den Browser

Jetzt können wir einen Testfall erstellen, der unseren ersten Schritt erledigt - öffnen Sie die Website:

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

Hier verwenden wir die driver.get () -Methode, um die Webseite zu laden. Als nächstes überprüfen wir den Titel, um sicherzustellen, dass wir am richtigen Ort sind.

5. Klicken Sie mit JavaScript auf ein Element

Selen kommt mit einem praktischen WebElement # Klick - Methode , die ein Klick - Ereignis auf einem bestimmten Element aufruft. In einigen Fällen ist eine Klickaktion jedoch nicht möglich.

Ein Beispiel ist, wenn wir auf ein deaktiviertes Element klicken möchten. In diesem Fall löst WebElement # click eine IllegalStateException aus . Stattdessen können wir die JavaScript-Unterstützung von Selenium verwenden.

Dazu benötigen wir zunächst den JavascriptExecutor . Da wir die ChromeDriver- Implementierung verwenden, können wir sie einfach auf das übertragen, was wir benötigen:

JavascriptExecutor executor = (JavascriptExecutor) driver;

Nachdem wir den JavascriptExecutor erhalten haben , können wir seine executeScript- Methode verwenden. Die Argumente sind das Skript selbst und ein Array von Skriptparametern. In unserem Fall rufen wir die Klickmethode für das erste Argument auf:

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

Lassen Sie es uns nun zu einer einzigen Methode zusammenfassen, die wir clickElement nennen :

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

Und schließlich können wir dies zu unserem Test hinzufügen:

@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. Nicht anklickbare Elemente

Eines der häufigsten Probleme beim Klicken auf ein Element mit JavaScript ist das Ausführen des Klickskripts, bevor auf das Element geklickt werden kann. In dieser Situation wird die Klickaktion nicht ausgeführt, aber der Code wird weiterhin ausgeführt.

Um dieses Problem zu beheben, müssen wir die Ausführung zurückhalten, bis das Klicken verfügbar ist. Wir können WebDriverWait # verwenden, bis wir warten, bis die Schaltfläche gerendert wird.

Erstens benötigt das W ebDriverWait- Objekt zwei Parameter. der Fahrer und eine Auszeit:

WebDriverWait wait = new WebDriverWait(driver, 5000); 

Dann rufen wir bis auf und geben die erwartete elementToBeClickable- Bedingung an:

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

Und sobald dies erfolgreich ist, wissen wir, dass wir fortfahren können:

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

Weitere verfügbare Zustandsmethoden finden Sie in der offiziellen Dokumentation.

7. Fazit

In diesem Tutorial haben wir gelernt, wie Sie mit JavaScript auf ein Element in Selenium klicken. Wie immer ist die Quelle für den Artikel auf GitHub verfügbar.