Contenu du cours
Introduction aux Tests d'Automatisation QA
Introduction aux Tests d'Automatisation QA
Rédaction de Tests d’Intégration avec Selenium et Jest
Pour rédiger des cas de test avec Selenium & Jest, il est nécessaire de s'assurer que la fenêtre du navigateur est correctement initialisée avant l'exécution de tout test. Le bloc beforeAll
peut être utilisé pour garantir que la fenêtre du navigateur est initialisée avant le démarrage des tests :
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();
});
Il est important de définir la variable driver
en dehors de ce bloc afin de pouvoir y accéder depuis les blocs de test.
Une fois l'exécution des cas de test terminée, il est nécessaire de fermer la fenêtre du navigateur :
afterAll(() => {
driver.quit();
});
Le reste du processus est très similaire à la rédaction de tout autre type de test, à la différence qu'il implique ici l'utilisation de méthodes permettant de contrôler le navigateur pour effectuer les tests. Par exemple, le cas de test suivant enregistre un nouvel utilisateur sur notre application Twitter :
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);
Dans le code ci-dessus, la valeur du délai d'attente pour ce cas de test est définie manuellement à 10000
ou 10 secondes, car les cas de test Selenium peuvent potentiellement prendre plus de temps que le délai d'attente par défaut de 5000
(5 secondes).
Il est important de noter que les cas de test doivent contenir au moins une assertion, également appelée instruction expect
. Le succès ou l'échec du cas de test est déterminé par les résultats des assertions.
Voici le code complet du script de test utilisé dans la vidéo :
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);
});
Merci pour vos commentaires !