Kursinhalt
Einführung in die QA-Automatisierungstests
Einführung in die QA-Automatisierungstests
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);
});
Danke für Ihr Feedback!