Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Schreiben von Integrationstests mit Selenium und Jest | Browser-Automatisierung mit Selenium
Einführung in die QA-Automatisierungstests
course content

Kursinhalt

Einführung in die QA-Automatisierungstests

Einführung in die QA-Automatisierungstests

1. Einführung in das Automatisierte Testen
2. Verwendung eines Testautomatisierungs-Frameworks
3. Browser-Automatisierung mit Selenium
4. Einführung in das Mittlere Automatisierungstesten

book
Schreiben von Integrationstests mit Selenium und Jest

Für das Schreiben von Testfällen mit Selenium & Jest muss sichergestellt werden, dass das Browserfenster vor allen Tests korrekt initialisiert wird. Hierfür kann der beforeAll-Block verwendet werden, um sicherzustellen, dass das Browserfenster vor Beginn der Testausführung initialisiert ist:

let driver = null;

beforeAll(async () => {

    let chromeDriverPath = path.resolve('C:/Users/AIMS TECH/Desktop/twitter-like-application-3/chromedriver.exe');
    let service = new chrome.ServiceBuilder(chromeDriverPath);

    let options = new chrome.Options();
    options.addArguments('--disable-search-engine-choice-screen');
    options.addArguments('--lang=en-GB');

    driver = await new Builder()
        .forBrowser('chrome')
        .setChromeService(service)
        .setChromeOptions(options)
        .build();

});

Es ist wichtig, die Variable driver außerhalb dieses Blocks zu definieren, damit sie in den Testblöcken zugänglich ist.

Nachdem die Testfälle ausgeführt wurden, muss sichergestellt werden, dass das Browserfenster geschlossen wird:

afterAll(() => {
    driver.quit();
});

Der restliche Ablauf ähnelt weitgehend dem Schreiben anderer Testarten, mit dem Unterschied, dass hier Methoden verwendet werden, die den Browser zur Testdurchführung steuern. Zum Beispiel registriert der folgende Testfall einen neuen Benutzer in unserer Twitter-Anwendung:

test('users can successfully register', async () => {

    // 1. Go to the login page
    driver.get('http://localhost:3000');

    // 2. Click "Register here" hyperlink
    let registerLink = await driver.findElement(By.id('register-link'));
    registerLink.click();

    // 3. Wait till Registration page is loaded
    await driver.wait(until.elementLocated(By.xpath('/html/body/div/h1')));
    let h1Element = driver.findElement(By.xpath('/html/body/div/h1'));
    await driver.wait(until.elementTextIs(h1Element, 'Register'));

    // 4. Enter "testuser1" in username field
    let usernameField = await driver.findElement(By.id('username-input'));
    usernameField.sendKeys("testuser1");

    // 5. Enter "examplePassword123" in password field
    let passwordField = await driver.findElement(By.id('password-input'));
    passwordField.sendKeys("examplePassword123");

    // 6. Click "Register"
    let registerBtn = await driver.findElement(By.id('register-btn'));
    registerBtn.click();

    // 7. Verify that the user is redirected to the Login page
    await driver.wait(until.elementLocated(By.xpath('/html/body/div/h1')));
    h1Element = driver.findElement(By.xpath('/html/body/div/h1'));

    expect(await h1Element.getText()).toBe("Login");

}, 10000);

Im obigen Code wird der Timeout-Wert für diesen Testfall manuell auf 10000 bzw. 10 Sekunden gesetzt, da Selenium-Testfälle potenziell länger als das Standard-Timeout von 5000 (5 Sekunden) dauern können.

Es ist wichtig zu beachten, dass Testfälle mindestens eine Assertion, auch bekannt als expect-Anweisung, enthalten müssen. Der Erfolg oder Misserfolg des Testfalls wird durch die Ergebnisse der Assertions bestimmt.

Nachfolgend ist der vollständige Code des im Video verwendeten Testskripts aufgeführt:

const { Builder, By, until } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const path = require('path');

let driver = null;

beforeAll(async () => {

    let chromeDriverPath = path.resolve('C:/Users/AIMS TECH/Desktop/twitter-like-application-3/chromedriver.exe');
    let service = new chrome.ServiceBuilder(chromeDriverPath);

    let options = new chrome.Options();
    options.addArguments('--disable-search-engine-choice-screen');
    options.addArguments('--lang=en-GB');

    driver = await new Builder()
        .forBrowser('chrome')
        .setChromeService(service)
        .setChromeOptions(options)
        .build();

});

afterAll(() => {
    driver.quit();
});

const sleep = (milliseconds) => {
    return new Promise(resolve => setTimeout(resolve, milliseconds));
};

describe('authentication tests', () => {
    describe('registration system', () => {
        test('users can successfully register', async () => {

            // 1. Go to the login page
            driver.get('http://localhost:3000');

            // 2. Click "Register here" hyperlink
            let registerLink = await driver.findElement(By.id('register-link'));
            registerLink.click();

            // 3. Wait till Registration page is loaded
            await driver.wait(until.elementLocated(By.xpath('/html/body/div/h1')));
            let h1Element = driver.findElement(By.xpath('/html/body/div/h1'));
            await driver.wait(until.elementTextIs(h1Element, 'Register'));

            // 4. Enter "testuser1" in username field
            let usernameField = await driver.findElement(By.id('username-input'));
            usernameField.sendKeys("testuser1");

            // 5. Enter "examplePassword123" in password field
            let passwordField = await driver.findElement(By.id('password-input'));
            passwordField.sendKeys("examplePassword123");

            // 6. Click "Register"
            let registerBtn = await driver.findElement(By.id('register-btn'));
            registerBtn.click();

            // 7. Verify that the user is redirected to the Login page
            await driver.wait(until.elementLocated(By.xpath('/html/body/div/h1')));
            h1Element = driver.findElement(By.xpath('/html/body/div/h1'));

            expect(await h1Element.getText()).toBe("Login");

        }, 10000);
    });

    describe('login system', () => {
        test('users can successfully login with correct credentials', async () => {
            
            // 1. Go to the login page
            driver.get('http://localhost:3000');
            
            // 2. Enter "testuser1" in the username field
            let usernameField = await driver.findElement(By.id('username-input'));
            usernameField.sendKeys('testuser1');
            
            // 3. Enter "examplePassword123" in the password field
            let passwordField = await driver.findElement(By.id('password-input'));
            passwordField.sendKeys('examplePassword123');
            
            // 4. Click "Login"
            let loginBtn = await driver.findElement(By.xpath('/html/body/div/form/button'));
            loginBtn.click();
            
            // 5. Verify that the application takes the user to the welcome page (also known as the dashboard)
            await driver.wait(until.elementLocated(By.xpath('/html/body/div/h1')));

            let h1Element = driver.findElement(By.xpath('/html/body/div/h1'));
            let h1Text = await h1Element.getText();

            expect(h1Text).toBe('Welcome, testuser1');
        });

    }, 10000);
});
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 6

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

course content

Kursinhalt

Einführung in die QA-Automatisierungstests

Einführung in die QA-Automatisierungstests

1. Einführung in das Automatisierte Testen
2. Verwendung eines Testautomatisierungs-Frameworks
3. Browser-Automatisierung mit Selenium
4. Einführung in das Mittlere Automatisierungstesten

book
Schreiben von Integrationstests mit Selenium und Jest

Für das Schreiben von Testfällen mit Selenium & Jest muss sichergestellt werden, dass das Browserfenster vor allen Tests korrekt initialisiert wird. Hierfür kann der beforeAll-Block verwendet werden, um sicherzustellen, dass das Browserfenster vor Beginn der Testausführung initialisiert ist:

let driver = null;

beforeAll(async () => {

    let chromeDriverPath = path.resolve('C:/Users/AIMS TECH/Desktop/twitter-like-application-3/chromedriver.exe');
    let service = new chrome.ServiceBuilder(chromeDriverPath);

    let options = new chrome.Options();
    options.addArguments('--disable-search-engine-choice-screen');
    options.addArguments('--lang=en-GB');

    driver = await new Builder()
        .forBrowser('chrome')
        .setChromeService(service)
        .setChromeOptions(options)
        .build();

});

Es ist wichtig, die Variable driver außerhalb dieses Blocks zu definieren, damit sie in den Testblöcken zugänglich ist.

Nachdem die Testfälle ausgeführt wurden, muss sichergestellt werden, dass das Browserfenster geschlossen wird:

afterAll(() => {
    driver.quit();
});

Der restliche Ablauf ähnelt weitgehend dem Schreiben anderer Testarten, mit dem Unterschied, dass hier Methoden verwendet werden, die den Browser zur Testdurchführung steuern. Zum Beispiel registriert der folgende Testfall einen neuen Benutzer in unserer Twitter-Anwendung:

test('users can successfully register', async () => {

    // 1. Go to the login page
    driver.get('http://localhost:3000');

    // 2. Click "Register here" hyperlink
    let registerLink = await driver.findElement(By.id('register-link'));
    registerLink.click();

    // 3. Wait till Registration page is loaded
    await driver.wait(until.elementLocated(By.xpath('/html/body/div/h1')));
    let h1Element = driver.findElement(By.xpath('/html/body/div/h1'));
    await driver.wait(until.elementTextIs(h1Element, 'Register'));

    // 4. Enter "testuser1" in username field
    let usernameField = await driver.findElement(By.id('username-input'));
    usernameField.sendKeys("testuser1");

    // 5. Enter "examplePassword123" in password field
    let passwordField = await driver.findElement(By.id('password-input'));
    passwordField.sendKeys("examplePassword123");

    // 6. Click "Register"
    let registerBtn = await driver.findElement(By.id('register-btn'));
    registerBtn.click();

    // 7. Verify that the user is redirected to the Login page
    await driver.wait(until.elementLocated(By.xpath('/html/body/div/h1')));
    h1Element = driver.findElement(By.xpath('/html/body/div/h1'));

    expect(await h1Element.getText()).toBe("Login");

}, 10000);

Im obigen Code wird der Timeout-Wert für diesen Testfall manuell auf 10000 bzw. 10 Sekunden gesetzt, da Selenium-Testfälle potenziell länger als das Standard-Timeout von 5000 (5 Sekunden) dauern können.

Es ist wichtig zu beachten, dass Testfälle mindestens eine Assertion, auch bekannt als expect-Anweisung, enthalten müssen. Der Erfolg oder Misserfolg des Testfalls wird durch die Ergebnisse der Assertions bestimmt.

Nachfolgend ist der vollständige Code des im Video verwendeten Testskripts aufgeführt:

const { Builder, By, until } = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const path = require('path');

let driver = null;

beforeAll(async () => {

    let chromeDriverPath = path.resolve('C:/Users/AIMS TECH/Desktop/twitter-like-application-3/chromedriver.exe');
    let service = new chrome.ServiceBuilder(chromeDriverPath);

    let options = new chrome.Options();
    options.addArguments('--disable-search-engine-choice-screen');
    options.addArguments('--lang=en-GB');

    driver = await new Builder()
        .forBrowser('chrome')
        .setChromeService(service)
        .setChromeOptions(options)
        .build();

});

afterAll(() => {
    driver.quit();
});

const sleep = (milliseconds) => {
    return new Promise(resolve => setTimeout(resolve, milliseconds));
};

describe('authentication tests', () => {
    describe('registration system', () => {
        test('users can successfully register', async () => {

            // 1. Go to the login page
            driver.get('http://localhost:3000');

            // 2. Click "Register here" hyperlink
            let registerLink = await driver.findElement(By.id('register-link'));
            registerLink.click();

            // 3. Wait till Registration page is loaded
            await driver.wait(until.elementLocated(By.xpath('/html/body/div/h1')));
            let h1Element = driver.findElement(By.xpath('/html/body/div/h1'));
            await driver.wait(until.elementTextIs(h1Element, 'Register'));

            // 4. Enter "testuser1" in username field
            let usernameField = await driver.findElement(By.id('username-input'));
            usernameField.sendKeys("testuser1");

            // 5. Enter "examplePassword123" in password field
            let passwordField = await driver.findElement(By.id('password-input'));
            passwordField.sendKeys("examplePassword123");

            // 6. Click "Register"
            let registerBtn = await driver.findElement(By.id('register-btn'));
            registerBtn.click();

            // 7. Verify that the user is redirected to the Login page
            await driver.wait(until.elementLocated(By.xpath('/html/body/div/h1')));
            h1Element = driver.findElement(By.xpath('/html/body/div/h1'));

            expect(await h1Element.getText()).toBe("Login");

        }, 10000);
    });

    describe('login system', () => {
        test('users can successfully login with correct credentials', async () => {
            
            // 1. Go to the login page
            driver.get('http://localhost:3000');
            
            // 2. Enter "testuser1" in the username field
            let usernameField = await driver.findElement(By.id('username-input'));
            usernameField.sendKeys('testuser1');
            
            // 3. Enter "examplePassword123" in the password field
            let passwordField = await driver.findElement(By.id('password-input'));
            passwordField.sendKeys('examplePassword123');
            
            // 4. Click "Login"
            let loginBtn = await driver.findElement(By.xpath('/html/body/div/form/button'));
            loginBtn.click();
            
            // 5. Verify that the application takes the user to the welcome page (also known as the dashboard)
            await driver.wait(until.elementLocated(By.xpath('/html/body/div/h1')));

            let h1Element = driver.findElement(By.xpath('/html/body/div/h1'));
            let h1Text = await h1Element.getText();

            expect(h1Text).toBe('Welcome, testuser1');
        });

    }, 10000);
});
War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 3. Kapitel 6
some-alt