• Skip to main content
Super Early Bird - Save 30% | Teams save up to 25%

AutomationSTAR

Test Automation Conference Europe

  • Programme
    • AutomationSTAR Team
    • 2025 programme
  • Attend
    • Why Attend
    • Volunteer
    • Location
    • Get approval
    • Bring your Team
    • 2025 Gallery
    • Testimonials
    • Community Hub
  • Exhibit
    • Partner Opportunities
    • Download EXPO Brochure
  • About Us
    • FAQ
    • Blog
    • Test Automation Patterns Wiki
    • Code of Conduct
    • Contact Us
  • Tickets

Fiona Nic Dhonnacha

Jun 23 2022

Sehen Sie sich das Programm der AutomationSTAR-Konferenz an

Schauen Sie sich das AutomationSTAR-Programm an, das eine Fülle von inspirierenden Sitzungen und ausführlichen Tutorials enthält, um Ihre Testautomatisierungsprojekte zu verbessern.

Das AutomationSTAR-Programm ist live! Am 17. und 18. Oktober treffen sich die schärfsten Köpfe der Automatisierungsbranche, um ihr Wissen mit Ihnen zu teilen. In visionären Keynotes, Track Talks, Workshops und halbtägigen Tutorials werden sie neue Erkenntnisse und Erfahrungen aus dem wirklichen Leben weitergeben und Ihnen bei der Bewältigung von Herausforderungen in Ihren Testprojekten helfen.

Egal, ob Sie neu in der Programmierung sind, ein Testautomatisierungsprojekt von Grund auf aufbauen oder sich für kodierungsfreie Tools interessieren, bei AutomationSTAR finden Sie die Antworten. Beschleunigen Sie Ihre Arbeit, bereiten Sie sich auf die Zukunft vor, und erreichen Sie Ihre Ziele. Die Vorträge befassen sich mit verschiedenen Ebenen der Testautomatisierung, darunter Methoden wie DevOps, neue Technologien wie KI und vieles mehr.

Weltklasse-Hauptredner

Unsere inspirierenden Keynote-Sprecher bieten Ihnen die besten Einblicke in die Testautomatisierung. Bas Dijkstra hinterfragt die Rolle von Automatisierungsingenieuren und warum die Rolle des Testautomatisierungsingenieurs eine schwierige ist. Andrew Knight erörtert, warum das Testen selbst sowohl Kunst als auch Technik ist, und gibt Ihnen eine Anleitung zum erfolgreichen Testen. Jenny Bramble versucht, die Frage zu beantworten, warum wir prüfen und warum wir die Entscheidungen treffen, die wir treffen.

Inspirierende Gespräche auf der Strecke

Die Vorträge des AutomationSTAR-Tracks sind vollgepackt mit anregenden Sessions – die Redner diskutieren eine Vielzahl von Themen, die einen echten Mehrwert für Ihr Testen darstellen: wie Sie echten Erfolg durch Automatisierung erzielen, ereignisgesteuerte Testautomatisierung, wie Sie Ihre automatisierten Tests zuverlässig machen, wie Sie Ihre funktionale Testautomatisierung revolutionieren, und vieles mehr. Machen Sie sich bereit, Ihre Projekte zu beschleunigen.

Bedeutsame Verbindungen

Natürlich werden Sie auch reichlich Gelegenheit haben, mit anderen Teilnehmern Kontakte zu knüpfen und Ihre Verbindungen zu erweitern. Mit Kaffeepausen, Networking-Mittagessen und vielem mehr ist AutomationSTAR ein vielfältiges, kollaboratives Umfeld, in dem Kreativität gedeiht. Sie werden sich mit Software-Testern aus allen Branchen austauschen und viele Aha-Erlebnisse haben, wenn Sie gemeinsam neue Ideen entwickeln!

siehe Programm

Dieser Blog wird von Google vom Englischen ins Deutsche übersetzt.

· Categorized: Testautomatisierung · Tagged: 2022

Jun 23 2022

Check out the AutomationSTAR Conference programme

The AutomationSTAR programme is packed with inspiring sessions and in-depth tutorials, to elevate your test automation projects.

The AutomationSTAR programme is live! This October 17-18, the sharpest minds in automation are coming together to share their knowledge with you. Through visionary keynotes, track talks, workshops, and half day tutorials they will share new insights, real-life experiences, and help YOU with challenges in your testing projects.

Whether you’re new to coding, building a test automation project from scratch, or interested in codeless tools, AutomationSTAR is where you’ll find the answers. Accelerate your delivery, get future ready, and achieve your goals. Talks will cover different levels of automation in testing, including methodologies such as DevOps, new technologies like AI, and lots more.

World class keynote speakers

Our inspiring keynote speakers are bringing you top insights on test automation. Bas Dijkstra questions the role of automation engineers, and why the role of test automation engineer is a difficult one. Andrew Knight discusses why testing itself is art as much as it’s engineering, and will give you a blueprint for testing success. Jenny Bramble strives to answer the question of why we test and why we make the choices we do.

Inspiring track talks

The AutomationSTAR track talks are packed with thought-provoking sessions – speakers will discuss a wide range of topics to add real value to your testing: how to get true success from automation, event driven test automation, how to make your automated tests reliable, revolutionizing your functional test automation, and lots more. Get ready to accelerate your projects.

Meaningful connections

Of course, you’ll also have plenty of opportunity to network with other delegates, and expand your connections. With coffee breaks, networking lunches, and lots more, AutomationSTAR is a diverse, collaborative environment where creativity flourishes. You’ll chat with software testers from every industry, and have lots of lightbulb moments as you spark new ideas together!

see programme

This blog is translated from English to German by Google.

· Categorized: test automation · Tagged: 2022

Jun 22 2022

Selenium-Tutorial: Umgang mit Popups mit Selenium Webdriver

Dieser Artikel wird tiefer in den Umgang mit Popups mit Selenium Webdriver eintauchen und sie automatisieren. Dies ist ein Blogbeitrag von Mark Collin auf EuroSTAR Huddle, unserer Online-Community für kostenlose Softwaretestressourcen.

Entmystifizierung von Popups mit Selenium

Nachdem Sie eine Weile mit Selenium gearbeitet haben, erhalten Sie schließlich die Aufgabe, etwas zu automatisieren, das eine Art Popup-Funktionalität hat. Popups können in Selenium ein heikles Thema sein, da die Definition dessen, was ein Popup ist, unklar sein kann und verschiedene Treiber ein unterschiedliches Standardverhalten aufweisen. In diesem Artikel werde ich versuchen, einige klare Definitionen verschiedener Popups bereitzustellen, Ihnen zu zeigen, wie Sie mit Popups in Selenium Webdriver umgehen, und Ihnen zeigen, wie Sie sie automatisieren, sowie ein paar Fallstricke.

Zuerst müssen wir definieren, was wir unter einem Popup verstehen; Es ist ein nebulöser Begriff, den Leute verwenden, um mehrere verschiedene Arten von Funktionalität zu beschreiben, die in freier Wildbahn sind. Ich unterteile Popups gerne in drei Hauptkategorien:

Popups auf Betriebssystemebene

Das erste aufgelistete Popup ist ein Dialog auf Betriebssystemebene; Dies sind die Dinge, die Sie sehen werden, wenn der Browser die Kontrolle an das Betriebssystem übergibt, um eine Aufgabe dafür zu erledigen (obwohl Browser wie Chrome die Grenzen hier ein wenig verwischen, indem sie es so aussehen lassen, als würde der Browser es tun). Sie werden diese normalerweise sehen, wenn Sie etwas tun, was der Browser nicht kann. An diesem Punkt übergibt der Browser an das Betriebssystem, um ein anderes Programm zu finden, um die erforderliche Aufgabe auszuführen. Einige Beispiele für diese Dinge sind:

  • Drucken einer Seite, die Sie im Browser anzeigen.
  • Versenden eines Links als E-Mail.
  • Herunterladen einer Datei.

Die beste Option, um mit diesen Popups auf Betriebssystemebene umzugehen, besteht darin, niemals etwas zu tun, das sie in Ihrem Test auslöst. Das Selenium-Tutorial ist nur für die Interaktion mit gerenderten Websites konzipiert
der Browser, die Steuerung des Betriebssystems ist völlig außerhalb des Bereichs. Wenn Sie versuchen wollten, mit diesen Popups auf Betriebssystemebene zu interagieren, müssten Sie einen Code schreiben, der die steuern kann
Betriebssystem selbst (z. B. etwas, das die Java Robot-Klassen verwendet). Es gibt Tools, die dies tun, aber es ist ein komplexes Stück Arbeit, und Sie müssen die Funktionalität auf Betriebssystemebene wirklich nicht testen, um zu überprüfen, ob Ihre Website funktioniert.

HTML-Popups (Leuchtkästen)

Ein HTML-Popup kann wie ein JavaScript-Popup oder ein Popup auf Betriebssystemebene aussehen, aber in Wirklichkeit ist es nur mehr HTML, das über dem vorhandenen HTML auf der Website geschichtet ist. Aufgrund der Tatsache, dass diese Popups HTML sind, können Website-Designer CSS verwenden, um diese Dinge wie etwas aussehen zu lassen, das sie nicht sind, was zu Verwirrung führen kann. Sie müssen nichts Besonderes tun, um damit zu arbeiten; schließlich sind sie nur HTML und CSS. Sie interagieren einfach mit ihnen auf die gleiche Weise wie mit jedem anderen Element auf dem Bildschirm und tun dann, was Sie wollen.

JavaScript-Popups

Dies sind blockierende Popups; Sie unterbrechen die Ausführung von JavaScript, bis mit ihnen interagiert wurde. In der Vergangenheit waren dies die Standardtypen von Selenium-Popups, obwohl sie heutzutage nicht mehr ganz so verbreitet sind, da Website-Designer dazu neigen, stattdessen nicht blockierende HTML-Popups zu verwenden. Dies sind Dinge, mit denen Selenium interagieren kann, aber Sie müssen im Voraus wissen, welche Aktionen diese Popups auslösen werden.

Wir sollten jetzt eine klare Vorstellung von den verschiedenen Arten von Popups haben. Als nächstes schauen wir uns etwas Code an.

Arbeiten mit Warnungen

Zunächst werden wir uns ansehen, wie Sie Warnmeldungen automatisieren können. Zunächst benötigen wir etwas HTML zur Automatisierung. Speichern Sie den folgenden HTML-Code als „alert.html“:

private Zeichenfolge alertFileLocation = “file:// /alert.html”;

    
    
        Warnungen in Selen
        
        
        
        
        
    
    
    

Dies ist ein Warnfeld, das von JavaScript ausgelöst, aber in HTML gerendert gerendert wird

Dies ist eine einfache Seite mit einigen Schaltflächen. Einer löst eine HTML-Warnung aus und einer löst eine JavaScript-Warnung aus. Laden Sie es in den Browser und probieren Sie es aus, um zu sehen, wie es funktioniert.

Wir werden jetzt Code schreiben, um diese Seite zu automatisieren. Zunächst müssen wir den Ort definieren, an dem Sie das obige HTML gespeichert haben. Ersetzen Sie einfach den folgenden Code durch den Pfad zu der Datei, die Sie oben gespeichert haben.

private Zeichenfolge alertFileLocation = “file:// /alert.html”;

Nun zu unserem ersten grundlegenden Teil der Automatisierung:

@Prüfen
 public void triggerBothPopups() löst Exception {
 driver.get (alertFileLocation);

 WebElement generateAlertOne = driver.findElement(By.id("js_alert"));
 WebElement generateAlertTwo = driver.findElement(By.id("html_alert"));

 generateAlertOne.click();
 generateAlertTwo.click();
  }

Dieser Code lädt die Webseite: Klicken Sie auf die Schaltfläche, um die JavaScript-Warnung auszulösen, und klicken Sie dann auf die Schaltfläche, um die HTML-Warnung auszulösen. Wenn Sie diesen Test jetzt ausführen, sollte er fehlschlagen und Sie sollten einen Fehler sehen, der so aussieht:

org.openqa.selenium.UnhandledAlertException: Unerwartete Warnung geöffnet: {Warntext: Dies ist eine JavaScript-Warnung}

Möglicherweise haben Sie jedoch keinen Fehler gesehen …

Dies liegt daran, dass verschiedene Treiber unterschiedlich implementiert werden; Wenn Sie Firefox v53.0.3 und GeckoDriver v0.16.1 ausführen, hat es die Tatsache ignoriert, dass dort ein Popup angezeigt wird, und versucht, trotzdem fortzufahren. Wir werden später darauf zurückkommen und uns das ansehen. Lassen Sie uns zunächst sicherstellen, dass wir chromedriver verwenden.

Jetzt, da wir Chromedriver verwenden, versuchen wir, unseren Automatisierungscode zu reparieren. Selenium bietet eine API, die es Ihnen ermöglicht, mit Warnungen zu interagieren, also lassen Sie uns sie verwenden.

 @Prüfen
 public void triggerBothPopups() löst Exception {
 driver.get (alertFileLocation);
 WebElement generateAlertOne = driver.findElement(By.id("js_alert"));
 WebElement generateAlertTwo = driver.findElement(By.id("html_alert"));

 generateAlertOne.click();
 driver.switchTo().alert().accept();
 generateAlertTwo.click();
 driver.switchTo().alert().accept();
  }

Wie Sie sehen können, sagen wir Selenium jetzt, dass es auf die Warnung umschalten soll, sobald sie aufgetaucht ist. Sobald wir darauf umgestellt haben, sagen wir Selenium, es zu akzeptieren. Lassen Sie uns den Test erneut ausführen und sehen, was jetzt passiert.

Sie sollten nun den folgenden Fehler sehen:

org.openqa.selenium.NoAlertPresentException: Keine Warnung offen

Dies liegt daran, dass unsere erste Benachrichtigung ein JavaScript-Popup ist, unsere zweite jedoch ein HTML-Popup (oder eine Lightbox). Die Funktion, zu einer Warnung zu wechseln und sie zu akzeptieren, funktioniert nur mit JavaScript-Popups, nicht mit HTML-Popups. Um mit dem HTML-Popup zu interagieren, müssen wir uns das Markup ansehen und damit umgehen wie mit jedem anderen HTML-Element.

Hier ist unser letztes Stück Testcode.

 @Prüfen
 public void triggerBothPopups() löst Exception {
 driver.get (alertFileLocation);
 WebElement generateAlertOne = driver.findElement(By.id("js_alert"));
 WebElement generateAlertTwo = driver.findElement(By.id("html_alert"));

 generateAlertOne.click();
 driver.switchTo().alert().accept();

 generateAlertTwo.click();
 WebElement closeHtmlAlertButton = driver.findElement(By.cssSelector(.ui-button"));
 closeHtmlAlertButton.click();
  }

Wir behandeln jetzt jede Art von Warnung korrekt und haben ein glückliches Stück Automatisierung.

Warum der Test in Firefox nicht fehlgeschlagen ist

Fahren wir mit unserem Selenium-Tutorial fort und kehren wir zu dem Problem mit Firefox zurück, das wir erwähnt haben, als wir unseren ersten Test geschrieben haben. Firefox löste keine Ausnahme aus, wenn eine unerwartete Warnung vorhanden war, sodass wir keinen Fehler sahen. Wenn so etwas passiert, kann es sehr verwirrend sein. Der Hauptgrund, warum unser Test nicht fehlschlug, war, dass wir danach keine Kontrollen mehr durchführten
Interaktion mit den Elementen. Lassen Sie uns den letzten Test machen, den wir geschrieben haben, und den Code löschen, der zur Warnung wechselt, und sehen, was passiert, wenn wir ihn in Firefox v53.0.3 und GeckoDriver v0.16.1 ausführen.

@Prüfen
 public void triggerBothPopups() löst Exception {
 driver.get (alertFileLocation);
 WebElement generateAlertOne = driver.findElement(By.id("js_alert"));
 WebElement generateAlertTwo = driver.findElement(By.id("html_alert"));

 generateAlertOne.click();

 generateAlertTwo.click();
 WebElement closeHtmlAlertButton = driver.findElement(By.cssSelector(.ui-button"));
 closeHtmlAlertButton.click();
  }

Diesmal schlägt der Test fehl, aber Sie sehen den folgenden Fehler:

org.openqa.selenium.NoSuchElementException: Element kann nicht gefunden werden: .ui-button

Es ist fehlgeschlagen, weil wir die Schaltfläche zum Schließen des HTML-Popups nicht finden können; Die Implikation hier ist, dass das Klicken auf die zweite Schaltfläche zum Generieren von Warnungen nicht funktioniert hat. Jetzt wissen wir, dass dies nicht der Fall ist, dieser Test schlägt fehl, weil wir den Code entfernt haben, der auf die Warnung umschaltet und sie akzeptiert. Können wir dies klarer machen, indem wir einen Screenshot dessen, was der Test sieht, in die Datei schreiben?

 @Prüfen
 public void triggerBothPopups() löst Exception {
 driver.get (alertFileLocation);
 WebElement generateAlertOne = driver.findElement(By.id("js_alert"));
 WebElement generateAlertTwo = driver.findElement(By.id("html_alert"));

 generateAlertOne.click();

 generateAlertTwo.click();

 Screenshot der Datei = neue Datei ("screenshot.png");
 FileOutputStream screenshotStream = new FileOutputStream(screenshot);
 screenshotStream.write(((TakeScreenshot) driver).getScreenshotAs(OutputType.BYTES));
 ScreenshotStream.close();
 System.out.println("Screenshot gespeichert unter: " + screenshot.getAbsolutePath());

 WebElement closeHtmlAlertButton = driver.findElement(By.cssSelector(.ui-button"));
 closeHtmlAlertButton.click();
  }

Lassen Sie uns den Test erneut ausführen; Dieses Mal wird ein Screenshot erstellt und der Speicherort der Datei im Konsolenprotokoll angezeigt. Dies sollte uns die JavaScript-Warnung zeigen, die alle Probleme verursacht.

Wenn Sie jetzt den Screenshot öffnen und sich ihn ansehen, wird er Ihnen wahrscheinlich nicht das zeigen, was Sie erwartet haben. Der Screenshot zeigt die gerenderte Website ohne JavaScript- oder HTML-Warnungen. Was ist los?

JavaScript-Popups sind nicht Teil der gerenderten Website, sondern werden vom Browser gerendert. Infolgedessen werden sie nicht in Screenshots von Selenium angezeigt. In jeder Hinsicht sieht es so aus, als hätten wir einen Fehler bei der Website-Implementierung gefunden. Es sieht so aus, als ob das Klicken auf die zweite Schaltfläche keine HTML-Warnung auslöst, die angezeigt werden soll. Wenn Sie jedoch zurückgehen und manuell testen, werden Sie sehen, dass es funktioniert.

Wir kennen das Problem, aber stellen Sie sich vor, wie verwirrend das für jemanden wäre, der nicht versteht, dass wir eine Mischung aus verschiedenen Arten von Popups haben. Sie würden wahrscheinlich einen Fehler melden, der besagt, dass die zweite Schaltfläche nicht funktioniert hat, und ihn an einen Entwickler zurückgeben, der das Problem nicht reproduzieren könnte (weil das einzige vorhandene Problem ein Problem mit dem Testcode ist).

Arbeiten mit anderen Arten von JavaScript-Popups

Bisher haben wir uns nur mit einem Popup-Typ beschäftigt, dem Alert. Es gibt zwei weitere Arten von JavaScript-Popups, auf die Sie möglicherweise stoßen, das Aufforderungs-Popup und das Bestätigungs-Popup. Lassen Sie uns das letzte Stück HTML erstellen, das wir automatisieren werden, speichern Sie Folgendes als „popup.html“:

    
    
    
        Eingabeaufforderungen in Selen
    
    
    

Wie zuvor müssen wir den Ort definieren, an dem Sie das obige HTML gespeichert haben. Ersetzen Sie einfach den folgenden Code durch den Pfad zu der Datei, die Sie oben gespeichert haben.

private String popupFileLocation = “file:///popup.html”;

Zunächst schauen wir uns an, wie wir mit einem Bestätigungs-Popup interagieren können. Bestätigungs-Popups stellen Ihnen eine Frage, der Sie entweder zustimmen oder die Sie abbrechen können. Sie haben immer zwei Optionen, „OK“ oder „Abbrechen“. Popups wie dieses werden normalerweise verwendet, um die Codeausführung zu blockieren, bis Sie etwas zustimmen.

Nehmen wir an, dass wir zunächst dem Bestätigungs-Popup zustimmen.

 @Prüfen
 public void triggerJavaScriptConfirmation() löst Exception {
 driver.get (popupFileLocation);

 WebElement generateConfirmationPopup = driver.findElement(By.id("js_confirm"));
 generateConfirmationPopup.click();

 driver.switchTo().alert().accept();
  }

Der Code ist sehr einfach, tatsächlich ist er genau derselbe wie der Code, den wir verwendet haben, um das Alarm-Popup zu automatisieren. Wenn wir dem Bestätigungs-Popup nicht zustimmen möchten, ist der Code genauso einfach:

 @Prüfen
 public void triggerJavaScriptConfirmation() löst Exception {
 driver.get (popupFileLocation);

 WebElement generateConfirmationPopup = driver.findElement(By.id("js_confirm"));
 generateConfirmationPopup.click();

 driver.switchTo().alert().dismiss();
  }

Der letzte Popup-Typ, den wir uns ansehen werden, ist die JavaScript-Eingabeaufforderung. Dies sind blockierende Popups, die verwendet werden, um einige Informationen von Ihnen zu erhalten. Wenn Sie diese Art von Popup verwenden, werden Sie dem Benutzer wahrscheinlich eine Frage stellen, auf die er antworten muss, also werden wir uns ansehen, wie wir überprüfen können, ob die richtige Frage gestellt und die erforderlichen Informationen eingegeben werden . Hier ist unser Code:

 @Prüfen
 public void triggerJavaScriptPrompt() löst Exception {
 driver.get (popupFileLocation);

 WebElement generatePromptPopup = driver.findElement(By.id("js_prompt"));
 generatePromptPopup.click();

 Alarmaufforderung = driver.switchTo().alert();

 assert(prompt.getText().equals("Dies ist eine JavaScript-Eingabeaufforderung, sie möchte einige Informationen erhalten."));

 prompt.dismiss();
  }

Nachdem wir unsere JavaScript-Eingabeaufforderung ausgelöst haben, haben wir uns diesmal entschieden, ein Alert-Objekt zu definieren. Wir werden mehr als einmal mit der Warnung interagieren, daher ist es sinnvoll, dies für die Klarheit und Sauberkeit des Codes zu tun. Wir haben dann den Befehl getText() verwendet, um den Text abzurufen, der dem Benutzer angezeigt wird, und eine Behauptung aufgestellt, um zu überprüfen, ob er mit unserem erwarteten Text übereinstimmt. Wir haben daraufhin entschieden, dass wir keine weiteren Angaben machen wollen und haben die Warnung zurückgewiesen.

Was wäre, wenn wir uns entschieden hätten, einige Informationen zu übermitteln? In diesem Fall hätten wir folgenden Code geschrieben:

 @Prüfen
 public void triggerJavaScriptPrompt() löst Exception {
 driver.get (popupFileLocation);

 WebElement generatePromptPopup = driver.findElement(By.id("js_prompt"));
 generatePromptPopup.click();

 Alarmaufforderung = driver.switchTo().alert();

 assert(prompt.getText().equals("Dies ist eine JavaScript-Eingabeaufforderung, sie möchte einige Informationen erhalten."));

 prompt.sendKeys("Einige Informationen");
 prompt.accept();
  }

Wie Sie sehen können, haben wir dieses Mal einige Informationen mit dem Befehl sendKeys () gesendet und dann die Eingabeaufforderung akzeptiert. Wir hätten natürlich trotzdem entscheiden können, die Eingabeaufforderung nach der Eingabe einiger Informationen zu schließen, aber das ist ein Szenario, das wir nicht geschrieben haben. Das könntest du immer selbst ausprobieren.

Es ist noch einmal erwähnenswert, dass verschiedene Treiberimplementierungen auf viele verschiedene Arten agieren können und verschiedene Treiberimplementierungen verschiedene Teile der WebDriver-API unterstützen können. Wenn Sie Probleme haben, lohnt es sich immer, einen anderen Treibertyp auszuprobieren, um zu sehen, ob Ihr Code funktioniert.

**Dieser Blog wurde von Google aus dem Englischen ins Deutsche übersetzt.**

· Categorized: Testautomatisierung

Jun 22 2022

Selenium tutorial: How to handle popups with Selenium Webdriver

This article will dive deeper into how to handle popups with selenium webdriver, and how to automate them. This is a blog post provided by Mark Collin on EuroSTAR Huddle, our online community for free software testing resources.

Demystifying popups with Selenium

After you have been working with Selenium for a while you will eventually be given a task to automate something that has some sort of popup functionality. Popups can be a sticky subject in Selenium because the definition of what a popup is can be unclear and different drivers exhibit different default behaviour. In this article I will try and provide some clear definitions of different popups, show you how to handle Popup in Selenium Webdriver and show you how to automate them, and a few gotchas as well.

First of all we need to define what we mean by a popup; it’s a nebulous term that people use to describe multiple different types of functionality that is out in the wild. I like to put popups into three main categories:

OS level popups

The first popup listed is an OS level dialogue; these are the things you will see when the browser hands over control to the operating system to do a task for it (although browsers like chrome are blurring the lines here a little bit by making it look like the browser is doing it). You will commonly see these if you do something that the browser cannot do, at this point the browser will hand over to the OS to find another program to perform the required task. Some examples of these things are:

  • Printing a page you are viewing in the browser.
  • Sending a link as an email.
  • Downloading a file.

The best option to deal with these OS level popups, is to never do anything that will trigger them in your test. Selenium tutorial is only designed to interact with websites rendered in
the browser, controlling the OS is totally out of scope. If you did want to try and interact with these OS level popups you would need to write some code that can control the
OS itself (e.g. something using the Java Robot classes). There are tools out there that will do this, but it’s a complex bit of work and you really don’t need to test OS level functionality to check that your website works.

HTML popups (Lightboxes)

A HTML popup can look like a JavaScript popup, or a OS level popup, but in reality it’s just more HTML layered over the top of existing HTML on the website. Due to the fact that these popups are HTML website designers can use CSS to make these things look like something they are not, which can cause confusion. You don’t need to do anything special to work with these; after all they are just HTML and CSS. You just interact with them in same way that you would interact with any other element on screen and then do what you want.

JavaScript popups

These are blocking popups; they will pause JavaScript execution until they have been interacted with. Historically, these were the default type of Selenium popup, although nowadays they are not quite as common because website designers tend to prefer using non-blocking HTML popups instead. These are things that Selenium can interact with, but you will need to know what actions are going to trigger these popups in advance.

We should now have a clear idea in our mind of the various types of popup. Next, let’s have a look at some code.

Working with alerts

First of all, we are going to look at how to automate things alerts. To start with, we will need some HTML to automate. Save the following html as ‘alert.html’:

private String alertFileLocation = “file://<PATH_TO>/alert.html”;

<!doctype html>
    <html lang="en">
    <head>
        <title>Alerts in Selenium</title>
        <link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
        <link rel="stylesheet" href="http://jqueryui.com/resources/demos/style.css">
        <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
        <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
        <script>
            function triggerAlert() {
                $('#alert').dialog();
            }
        </script>
    </head>
    <body style="background-color: #6cb5ff">
    <div id="buttons">
        <button id="js_alert" onclick="alert('This is a JavaScript Alert');">Click me for a basic JavaScript alert</button>
        <button id="html_alert" onclick="triggerAlert()">Click me for a basic jQuery alert</button>
    </div>
    <div id="alert" title="Dialog" style="display: none">
        <p>This is an alert box triggered by JavaScript, but rendered in rendered in HTML</p>
    </div>
    </body>
    </html>

This is a simple page that has a couple of buttons. One will trigger a HTML alert, and one will trigger a JavaScript alert. Load it up in the browser, and try it out to see how it works.

We are now going to write some code to automate this page. First of all, we need to define the location where you saved the above HTML. Just replace in the below code with the path to the file you saved above.

private String alertFileLocation = “file://<PATH_TO>/alert.html”;

Now on to our first basic piece of automation:

@Test
        public void triggerBothPopups() throws Exception {
            driver.get(alertFileLocation);

            WebElement generateAlertOne = driver.findElement(By.id("js_alert"));
            WebElement generateAlertTwo = driver.findElement(By.id("html_alert"));

            generateAlertOne.click();
            generateAlertTwo.click();
        }

This code will load up the web page: click on the button to trigger the JavaScript alert, and then click on the button to trigger the HTML alert. If you now run this test it should fail, and you should see an error that looks like this:

org.openqa.selenium.UnhandledAlertException: unexpected alert open: {Alert text : This is a JavaScript Alert}

However you may not have seen an error…

This is because different drivers are implemented differently; if you are running Firefox v53.0.3 and GeckoDriver v0.16.1 it will have ignored the fact that there is a popup there and tried to carry on regardless. We will come back and look at this later on. For now, let’s make sure we are using chromedriver.

Now that we are using chromedriver, let’s try and fix our automation code. Selenium provides an API that enables you to interact with alerts, so let’s use it.

   @Test
        public void triggerBothPopups() throws Exception {
            driver.get(alertFileLocation);
            WebElement generateAlertOne = driver.findElement(By.id("js_alert"));
            WebElement generateAlertTwo = driver.findElement(By.id("html_alert"));

            generateAlertOne.click();
            driver.switchTo().alert().accept();
            generateAlertTwo.click();
            driver.switchTo().alert().accept();
        }

As you can see, we are now telling Selenium to switch to the alert once it has popped up. Once we have switched to it, we are telling Selenium to accept it. Let’s run the test again and see what happens now.

You should now see the following error:

org.openqa.selenium.NoAlertPresentException: no alert open

This is because our first alert is a JavaScript popup, but our second one is a HTML popup (or a Lightbox). The functionality to switch to an alert and accept it will only work with JavaScript popups, not HTML popups. To interact with the HTML popup we will need to look at the markup, and deal with it like we would any other HTML element.

Here is our final bit of test code.

 @Test
        public void triggerBothPopups() throws Exception {
            driver.get(alertFileLocation);
            WebElement generateAlertOne = driver.findElement(By.id("js_alert"));
            WebElement generateAlertTwo = driver.findElement(By.id("html_alert"));

            generateAlertOne.click();
            driver.switchTo().alert().accept();

            generateAlertTwo.click();
            WebElement closeHtmlAlertButton = driver.findElement(By.cssSelector(".ui-button"));
            closeHtmlAlertButton.click();
        }

We are now treating each type of alert correctly, and we have one happy piece of automation.

Why the test didn’t fail in Firefox

Continuing with our Selenium tutorial, let’s go back to the problem with Firefox that we mentioned when we wrote our initial test. Firefox was not throwing an exception when an unexpected alert was present, so we weren’t seeing an error. If something like this happens it can be very confusing. The main reason our test was not failing was because we were not performing any checks after
interacting with the elements. Let’s take the final test that we wrote and delete the code that switches to the alert, and see what happens when we run it in Firefox v53.0.3 and GeckoDriver v0.16.1.

@Test
            public void triggerBothPopups() throws Exception {
            driver.get(alertFileLocation);
            WebElement generateAlertOne = driver.findElement(By.id("js_alert"));
            WebElement generateAlertTwo = driver.findElement(By.id("html_alert"));

            generateAlertOne.click();

            generateAlertTwo.click();
            WebElement closeHtmlAlertButton = driver.findElement(By.cssSelector(".ui-button"));
            closeHtmlAlertButton.click();
        }

Now this time the test will fail, but you will see the following error:

org.openqa.selenium.NoSuchElementException: Unable to locate element: .ui-button

It has failed because we can’t find the button that is used to close the HTML popup; the implication here is that clicking on the second generate alert button did not work. Now we know that this is not the case, this test is failing because we have removed the code that switches to the alert and accepts it. Can we make this clearer by writing a screenshot of what the test is seeing to file?

 @Test
        public void triggerBothPopups() throws Exception {
            driver.get(alertFileLocation);
            WebElement generateAlertOne = driver.findElement(By.id("js_alert"));
            WebElement generateAlertTwo = driver.findElement(By.id("html_alert"));

            generateAlertOne.click();

            generateAlertTwo.click();

            File screenshot = new File("screenshot.png");
            FileOutputStream screenshotStream = new FileOutputStream(screenshot);
            screenshotStream.write(((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES));
            screenshotStream.close();
            System.out.println("Screenshot saved at: " + screenshot.getAbsolutePath());

            WebElement closeHtmlAlertButton = driver.findElement(By.cssSelector(".ui-button"));
            closeHtmlAlertButton.click();
        }

Let’s run the test again; this time a screenshot will be generated and the file location will be shown in the console log. This should show us that JavaScript alert that is causing all of the problems.

If you now open up the screenshot and look at it, it’s probably not going to show you what you expected. The screenshot shows the rendered website with no JavaScript or HTML alerts. What’s going on?

JavaScript popups are not part of the website that is being rendered, they are instead rendered by the browser. As a result they don’t show up in screenshots taken by selenium. To all intents and purposes, it looks like we have found a bug with the website implementation. It looks like clicking on the second button does not trigger an HTML alert to be shown. However, if you go back and test manually you will see that it works.

We know what the problem is, but imagine how confusing this would be to somebody who didn’t understand that we had a mixture of different types of popups. You would probably raise a bug stating that the second button didn’t work and pass it back to a dev who would not be able to reproduce the problem (because the only problem that exists is a problem with the test code).

Working with other types of JavaScript popup

So far we have looked at only one type of popup, the alert. There are two other types of JavaScript popups that you may come across, the prompt popup and the confirmation popup. Let’s create the last bit of HTML we are going to automate, save the following as ‘popup.html’:

    <!doctype html>
    <html lang="en">
    <head>
        <title>Prompts in Selenium</title>
    </head>
    <body style="background-color: #6cb5ff">
    <div id="buttons">
        <button id="js_confirm" onclick="confirm('This is a JavaScript confirmation box, you can select OK or Cancel.');">Click me for a basic JavaScript confirmation box</button>
        <button id="js_prompt" onclick="prompt('This is a JavaScript Prompt, it wants to get some information.');">Click me for a basic JavaScript prompt</button>
    </div>
    </body>
    </html>

As before, we need to define the location where you saved the above HTML. Just replace in the below code with the path to the file you saved above.

private String popupFileLocation = “file:///popup.html”;

First of all, we will look at how we can interact with a confirmation popup. Confirmation popups will ask you a question that you can either agree to, or cancel out of. They will always have two options, ‘OK’ or ‘Cancel’. Popups like this are usually used to block code execution until you agree to something.

Let us assume that we are going to agree with the confirmation popup first of all.

            @Test
            public void triggerJavaScriptConfirmation() throws Exception {
                driver.get(popupFileLocation);

                WebElement generateConfirmationPopup = driver.findElement(By.id("js_confirm"));
                generateConfirmationPopup.click();

                driver.switchTo().alert().accept();
            }

The code is very simple, in fact it’s exactly the same as the code we used to automate the alert popup. If we don’t want to agree with the confirmation popup the code is just as simple:

            @Test
            public void triggerJavaScriptConfirmation() throws Exception {
                driver.get(popupFileLocation);

                WebElement generateConfirmationPopup = driver.findElement(By.id("js_confirm"));
                generateConfirmationPopup.click();

                driver.switchTo().alert().dismiss();
            }

The last type of popup we are going to look at is the JavaScript prompt. These are blocking popups that are used to get some information from you. When you use these types of popup you are probably going to be asking the user a question that they need to respond to, so we will have a look at how we can check that the right question is being asked as well as entering the required information. Here is our code:

            @Test
            public void triggerJavaScriptPrompt() throws Exception {
                driver.get(popupFileLocation);

                WebElement generatePromptPopup = driver.findElement(By.id("js_prompt"));
                generatePromptPopup.click();

                Alert prompt = driver.switchTo().alert();

                assert(prompt.getText().equals("This is a JavaScript Prompt, it wants to get some information."));

                prompt.dismiss();
            }

This time, after triggering our JavaScript prompt, we have decided to define an Alert object. We are going to be interacting with the alert more than once so it makes sense to do so for code clarity and cleanliness. We have then used the getText() command to get the text that is being displayed to the user and made an assertion to check that it matches our expected text. We have then decided that we don’t want to provide any further information and dismissed the alert.

What about if we decided that we did want to send over some information? In that case we would have written the following code:

            @Test
            public void triggerJavaScriptPrompt() throws Exception {
                driver.get(popupFileLocation);

                WebElement generatePromptPopup = driver.findElement(By.id("js_prompt"));
                generatePromptPopup.click();

                Alert prompt = driver.switchTo().alert();

                assert(prompt.getText().equals("This is a JavaScript Prompt, it wants to get some information."));

                prompt.sendKeys("Some information");
                prompt.accept();
            }

As you can see this time we have sent some information over using the sendKeys() command and then accepted the prompt. We could of course have still decided to dismiss the prompt after entering some information, but that’s a scenario we haven’t written. You could always try that one yourself.

It is worth mentioning once more that different driver implementations can act in many different ways, and different driver implementations can support different parts of the WebDriver API. If you are having problems it’s always worth trying a different type of driver to see if your code can work.

· Categorized: test automation

Jun 22 2022

Ein Vergleich von automatisierten Testwerkzeugen

Dieser Vergleich beliebter Toolsets für automatisierte Testtools hilft Ihnen, das richtige Automatisierungstool für Ihr Projekt zu finden. Dies ist ein Blogbeitrag von Rai Kou auf EuroSTAR Huddle, unserer Online-Community für kostenlose Softwaretestressourcen.

Ein entscheidender Faktor für die erfolgreiche Anwendung von Testautomatisierung in Softwareprojekten ist die Auswahl und Verwendung der richtigen Tools für die Testautomatisierung. Dies ist eine entmutigende Aufgabe, insbesondere für diejenigen, die neu in der Softwaretestautomatisierung sind, da auf dem Markt so viele Tools zur Auswahl stehen, die jeweils unterschiedliche Stärken und Schwächen haben. Es gibt kein Tool, das alle automatisierten Testanforderungen erfüllen kann, was es schwierig macht, das richtige Tool zu finden. Erfahren Sie, wie Sie mit diesem qualitativen Vergleich gängiger Toolsets für automatisierte Tests auf dem Markt das richtige Automatisierungstool für Ihr Projekt finden.

Überblick über Testautomatisierungstools

Selen

Selenium ist das beliebteste Automatisierungs-Framework, das aus vielen Tools und Plugins für das Testen von Webanwendungen besteht. Selenium ist bekannt für seine leistungsstarke Fähigkeit zur Unterstützung von Leistungstests von Webanwendungen. Selenium ist die beliebteste Wahl im Bereich der Open-Source-Testautomatisierung, teilweise aufgrund seiner großen und aktiven Entwickler- und Benutzergemeinschaft.

HP Unified Functional Testing (UFT)

Früher QuickTest Professional (QTP), ist dies wahrscheinlich das beliebteste kommerzielle Tool für die Automatisierung funktionaler Tests. HP UFT bietet eine umfassende Reihe von Funktionen, die die meisten funktionellen automatisierten Testanforderungen auf Desktop-, Mobil- und Webplattformen abdecken können.

Testabgeschlossen

TestComplete ist auch eine kommerzielle integrierte Plattform für das Testen von Desktop-, Mobil- und Webanwendungen. Wie UFT bietet TestComplete eine Reihe wichtiger Testautomatisierungsfunktionen wie schlüsselwortgesteuerte und datengesteuerte Tests, Cross-Browser-Tests, API-Tests und CI-Integrationen. Dieses Tool unterstützt eine Reihe von Sprachen, darunter JavaScript, Python, VBScript, JScript, DelphiScript, C++Script und C#Script zum Schreiben von Testskripten.

Katalon-Studio

Dies ist eine automatisierte Testplattform, die eine umfassende Reihe von Funktionen bietet, um vollständig automatisierte Testlösungen für mobile und Webanwendungen zu implementieren. Katalon Studio baut auf den Open-Source-Frameworks Selenium und Appium auf und ermöglicht es Teams, schnell mit der Testautomatisierung zu beginnen, indem der Aufwand und das Fachwissen reduziert werden, die zum Erlernen und Integrieren dieser Frameworks für automatisierte Testanforderungen erforderlich sind.

Vergleich der Testautomatisierungstools

Die folgende Tabelle bietet einen Vergleich der Tools basierend auf den wichtigsten Merkmalen der Softwareautomatisierung.

Stärken und Schwächen

Nachfolgend finden Sie eine Zusammenfassung der wichtigsten Stärken und Einschränkungen der Tools, basierend auf dem obigen Vergleich.

Es gibt kein einheitliches Tool für automatisiertes Testen. Es wird dringend empfohlen, dass Tester verschiedene Tools evaluieren, um auszuwählen, was ihren automatisierten Testanforderungen am besten entspricht. Programmiersprachen und Technologien, die zur Entwicklung von Software verwendet werden, entwickeln sich ständig weiter, ebenso wie die automatisierten Testwerkzeuge, wodurch die Kosten zu einem wesentlichen Faktor bei der Werkzeugauswahl werden.

Kommerzielle Anbieter berechnen oft Gebühren für Tool-Upgrades, die erheblich sein können, wenn Ihre Software neue und sich häufig ändernde Technologien verwendet. Open-Source- und nicht-kommerzielle Tools hingegen verursachen keine zusätzlichen Kosten, erfordern jedoch Aufwand und Fachwissen für die Integration neuer Upgrades. Es ist schwierig, die Unterstützung und das Fachwissen zu finden, die für die Integration verschiedener Tools und Frameworks in Open-Source-Lösungen erforderlich sind.

Aufkommende Tools, die sich in Open-Source-Frameworks integrieren lassen, bieten eine praktikable Alternative sowohl zu kommerziellen als auch zu automatisierten Open-Source-Testlösungen.

**Dieser Blog wurde von Google aus dem Englischen ins Deutsche übersetzt.

· Categorized: Testautomatisierung

  • « Go to Previous Page
  • Page 1
  • Page 2
  • Page 3
  • Page 4
  • Go to Next Page »

Copyright © 2026 · Impressum · Privacy · T&C

part of the