Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
nodejs_selenium [2024/01/24 20:30] enric_mieza_sanchez [Test Cordova : afegir tasca] |
nodejs_selenium [2025/02/04 18:36] (actual) enric_mieza_sanchez [Test 02 : login ok] |
||
---|---|---|---|
Línia 4: | Línia 4: | ||
Ens pot ser molt pràctic per a realitzar tests per a [[Cordova]] o el propi [[NodeJS]]. | Ens pot ser molt pràctic per a realitzar tests per a [[Cordova]] o el propi [[NodeJS]]. | ||
+ | |||
+ | {{ selenium-diag.png }} | ||
Referències: | Referències: | ||
Línia 66: | Línia 68: | ||
En aquests tests funcionals, els tests estan aïllats del desenvolupament i del llenguatge emprat, pel què podem fer un objecte per testejar qualsevol altre projecte. Només el fitxer '' | En aquests tests funcionals, els tests estan aïllats del desenvolupament i del llenguatge emprat, pel què podem fer un objecte per testejar qualsevol altre projecte. Només el fitxer '' | ||
+ | |||
+ | ==== Arxius de posada en marxa del server ==== | ||
+ | |||
+ | <WRAP important> | ||
+ | '' | ||
+ | </ | ||
+ | |||
+ | |||
+ | <tabbox Versió Linux> | ||
=== run.sh per a PHP === | === run.sh per a PHP === | ||
Línia 85: | Línia 96: | ||
# entrem a la carpeta del codi font | # entrem a la carpeta del codi font | ||
cd $SCRIPT_DIR | cd $SCRIPT_DIR | ||
- | # engeguem el PHP server | + | # engeguem el cordova |
- | cordova | + | cordova serve |
</ | </ | ||
+ | |||
+ | <tabbox Versió Windows> | ||
+ | |||
+ | === run.sh per a Cordova === | ||
+ | <file bash run.bat> | ||
+ | cordova serve | ||
+ | </ | ||
+ | |||
+ | </ | ||
\\ | \\ | ||
Línia 116: | Línia 136: | ||
// run server and setup driver | // run server and setup driver | ||
- | await this.runServer( " | + | await this.runServer( " |
await this.setupDriver(); | await this.setupDriver(); | ||
// deixem temps a que el servidor es posi en marxa | // deixem temps a que el servidor es posi en marxa | ||
Línia 170: | Línia 190: | ||
// Engeguem server amb la APP | // Engeguem server amb la APP | ||
if( process.platform==" | if( process.platform==" | ||
- | this.cmd = spawn(command, | + | this.cmd = spawn(command+" |
} else { | } else { | ||
// linux, macos (darwin), or other | // linux, macos (darwin), or other | ||
- | this.cmd = spawn(command, | + | this.cmd = spawn(command+" |
} | } | ||
Línia 244: | Línia 264: | ||
\\ | \\ | ||
- | ==== Test 02 : formulari buit ==== | + | ==== Test 00 : formulari buit ==== |
Aquest exemple testeja que si deixem buit el nom, ens surt un '' | Aquest exemple testeja que si deixem buit el nom, ens surt un '' | ||
- | <file javascript | + | <file javascript |
// carreguem les llibreries | // carreguem les llibreries | ||
const { BaseTest } = require(" | const { BaseTest } = require(" | ||
Línia 291: | Línia 311: | ||
</ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | |||
+ | ==== Test 02 : login ok ==== | ||
+ | |||
+ | Testeja que podem logar-nos en un //admin panel// de [[Django]]. | ||
+ | |||
+ | <WRAP important> | ||
+ | És molt important **no deixar credencials en els arxius de codi** per raons òbvies. | ||
+ | |||
+ | Per selventar aquest problema, aquest exemple utilitza la llibreria '' | ||
+ | |||
+ | $ npm install dotenv | ||
+ | |||
+ | I crear un arxiu '' | ||
+ | URL=http:// | ||
+ | HEADLESS=false | ||
+ | USUARI=el-meu-username | ||
+ | CONTRASENYA=la-contrasenya-secreta | ||
+ | </ | ||
+ | |||
+ | <file javascript 02-login-ok.js> | ||
+ | |||
+ | // carreguem les llibreries | ||
+ | const { BaseTest } = require(" | ||
+ | const { By, until } = require(" | ||
+ | const assert = require(' | ||
+ | |||
+ | //.env | ||
+ | require(' | ||
+ | console.log(process.env) | ||
+ | |||
+ | class MyTest extends BaseTest | ||
+ | { | ||
+ | async test() { | ||
+ | // Login test | ||
+ | ////////////////////////////////////////////////////// | ||
+ | var site = process.env.URL | ||
+ | var driver = this.driver | ||
+ | await driver.get(site+"/ | ||
+ | |||
+ | // 1 cercar login box | ||
+ | let usernameInput = await driver.wait(until.elementLocated( | ||
+ | By.id(' | ||
+ | let passwordInput = await driver.wait(until.elementLocated( | ||
+ | By.id(' | ||
+ | |||
+ | // 2 posar usuari i pass | ||
+ | usernameInput.sendKeys(process.env.USUARI) | ||
+ | passwordInput.sendKeys(process.env.CONTRASENYA) | ||
+ | |||
+ | // 3 boto send .click() | ||
+ | let sendButton = await driver.wait(until.elementLocated( | ||
+ | By.css(' | ||
+ | sendButton.click() | ||
+ | |||
+ | // 4 comprovem que hem entrat | ||
+ | let logoutButton = await driver.wait(until.elementLocated( | ||
+ | By.xpath('// | ||
+ | var currentLogoutText = await logoutButton.getText(); | ||
+ | var expectedText = " | ||
+ | | ||
+ | // assert verifica que es compleixin condicions concretes | ||
+ | // si no es compleix, llançarà una excepció de test fallit | ||
+ | assert( currentLogoutText==expectedText, | ||
+ | "Login fallit.\n\tTEXT TROBAT=" | ||
+ | |||
+ | console.log(" | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // executem el test | ||
+ | |||
+ | (async function test_example() { | ||
+ | const test = new MyTest(); | ||
+ | await test.run(); | ||
+ | console.log(" | ||
+ | })(); | ||
+ | </ | ||
\\ | \\ | ||
Línia 309: | Línia 409: | ||
// emprem this.driver per utilitzar Selenium | // emprem this.driver per utilitzar Selenium | ||
- | class MyTest | + | class AddTaskTest |
{ | { | ||
async test() { | async test() { | ||
Línia 339: | Línia 439: | ||
(async function test_example() { | (async function test_example() { | ||
- | const test = new MyTest(); | + | const test = new AddTaskTest(); |
await test.run(); | await test.run(); | ||
console.log(" | console.log(" | ||
})(); | })(); | ||
</ | </ | ||
+ | |||
+ | <WRAP todo> | ||
+ | Crea un test '' | ||
+ | * Crei 3 tasques amb noms aleatoris. | ||
+ | * Esborri una d' | ||
+ | * Comprovi que no existeix la tasca esborrada i sí que romanen les altres dues. | ||
+ | </ | ||
+ | |||
+ | ===== Exercicis ===== | ||
+ | <WRAP todo> | ||
+ | Crea els següents tests amb la web que t'ha proporcionat el professor: | ||
+ | * 01 comprovar header h1 | ||
+ | * 02a fer login amb l' | ||
+ | * 02b intentar login amb usuari incorrecte (ha de refusar el login) | ||
+ | * 03 entrar i crear un llibre amb el teu nom | ||
+ | * 04 entrar i esborrar el llibre amb el teu nom. | ||
+ | * 05 crear un arbre de categories aniuades (jerarquia). Podeu triar temàtica: | ||
+ | * pelis: drama, thriller, acció, etc. | ||
+ | * productes: ferreteria, imatge i so, verdures, informàtica, | ||
+ | * regions: espanya, comunitat autònoma, província, ciutat | ||
+ | * regions2: continents, paisos, regions | ||
+ | * etc. | ||
+ | * 06 crear un llibre i cercar les dades per ISBN | ||
+ | </ | ||
+ | |||
+ | <WRAP todo> | ||
+ | Crea un dels següents tests que t' | ||
+ | [[Django Test # | ||
+ | </ | ||
+ | |||