[[oktatas:web:selenium|< Selenium]] ====== Selenium és Jasmine ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2023 * Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC Attribution-Share Alike 4.0 International]] * Web: https://szit.hu ===== Bevezetés ===== A Selenium tesztet Jasmine tesztbe ágyazva futtatjuk. ===== Projekt kezdése ===== mkdir triangle cd triangle npm init -y npm install --save-dev selenium-webdriver npm install --save-dev chromedriver npm install --save-dev jasmine npm install --save-dev lite-server Ha nem megfelelő selenium-webdriver töltődik le, adjuk meg a verziószámát, például: npm install --save-dev chromedriver@111.0.0 { "scripts": { "test": "jasmine", "start": "lite-server" }, "devDependencies": { "chromedriver": "^111.0.0", "jasmine": "^4.6.0", "lite-server": "^2.6.1", "selenium-webdriver": "^4.8.1" } } { "server": ["src"] } node_modules/ ===== A projekt ===== Triangle

Triangle

doc = { baseInput: document.querySelector('#base'), heightInput: document.querySelector('#height'), areaInput: document.querySelector('#area'), calcButton: document.querySelector('#calcButton') }; window.addEventListener('load', () => { init(); }); function init() { doc.calcButton.addEventListener('click', () => { startCalc(); }); } function startCalc() { let base = Number(doc.baseInput.value); let height = Number(doc.heightInput.value); doc.areaInput.value = calcTriangleArea(base, height); } function calcTriangleArea(base, height) { return base * height / 2; } ===== Teszt készítése ===== npx jasmine init { "spec_dir": "test", "spec_files": [ "**/*[sS]pec.?(m)js" ], "helpers": [ "helpers/**/*.?(m)js" ], "env": { "stopSpecOnExpectationFailure": false, "random": false } } A spec_dir értékét "test"-re állítottuk, a random értékét false-ra. A false beállításra azért van szükség, mert az utolsó tesztben bezárjuk a teszt böngészőablakot. Ha random futnak a tesztek, nem tudjuk melyik az utolsó. Lemondhatunk az ablak bezárásról, és akkor futhatnak random sorrendben a tesztek. mkdir test const { Builder, By } = require("selenium-webdriver"); const chrome = require('chromedriver'); const url = 'http://localhost:3000'; const driver = new Builder().forBrowser("chrome").build(); describe('Háromszög területszámítás', () => { it('30, 35 bemenetre 525 eredmény', async () => { await driver.get(url); await driver.findElement(By.id('base')).sendKeys('30'); await driver.findElement(By.id('height')).sendKeys('35'); await driver.findElement(By.id('calcButton')).click(); const areaStr = await driver.findElement(By.id('area')).getAttribute('value'); const area = parseFloat(areaStr); expect(area).toBeCloseTo(525, 0.9); }); it('130, 135 bemenetre 8775 eredmény', async () => { await driver.get(url); await driver.findElement(By.id('base')).sendKeys('130'); await driver.findElement(By.id('height')).sendKeys('135'); await driver.findElement(By.id('calcButton')).click(); const areaStr = await driver.findElement(By.id('area')).getAttribute('value'); const area = parseFloat(areaStr); expect(area).toBeCloseTo(8775, 0.9); await driver.close(); // Utolsó tesztben lezárjuk }); }); A Selenium tesztet Jasmine teszttel futtatjuk. A toBeCloseTo() függvény használata esetén használható határérték is, második paraméterként. ===== A teszt futtatása ===== Indítsuk el a weblapot, ha az nem fut: npm start Majd a tesztet: npm test A futtatásra példa: npm test > test > jasmine Randomized with seed 32823 Started . 1 spec, 0 failures Finished in 1.066 seconds Randomized with seed 32823 (jasmine --random=true --seed=32823) ===== Üzenet ===== Újabb példa. Tesztelhető weboldal: * https://github.com/oktat/msg.git * https://github.com/oktat/msg.git A teszt teljes változata: * https://github.com/oktat/msg_selenium mkdir app01 cd app01 npm install chromedriver@111.0.0 npm install jasmine npm install selenium-webdriver { "scripts": { "test": "jasmine" }, "devDependencies": { "chromedriver": "^111.0.0", "jasmine": "^4.6.0", "selenium-webdriver": "^4.9.2" } } npx jasmine init { "spec_dir": "test", "spec_files": [ "**/*[sS]pec.?(m)js" ], "helpers": [ "helpers/**/*.?(m)js" ], "env": { "stopSpecOnExpectationFailure": false, "random": false } } ==== Teszt ==== mkdir test const { Builder, By } = require("selenium-webdriver"); const chrome = require('chromedriver'); const url = 'https://oktat.github.io/msg/'; describe('Üzenő', () => { var driver = null; beforeAll(() => { driver = new Builder().forBrowser("chrome").build(); }); beforeEach(async () => { await driver.get(url); }); it('Egy', async () => { await driver.findElement(By.id('msg')).sendKeys('Valami'); await driver.findElement(By.id('enterButton')).click(); const text = await driver.findElement(By.className('box')).getText(); expect(text).toBe('Valami'); }); it('Kettő', async () => { await driver.findElement(By.id('msg')).sendKeys('Más'); await driver.findElement(By.id('enterButton')).click(); const text = await driver.findElement(By.className('box')).getText(); expect(text).toBe('Más'); }); afterAll(() => { driver.quit(); }); }); * A beforeAll() függvény egyszer hajtódik végre az összes teszt előtt a blokkban. * A beforeEach() függvény minden teszt előtt végrehajtódik a blokkban. ==== Futtatás ==== npm test