bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


nodejs_selenium

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

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 ''run.sh'' contindrà les i instruccions adients per engegar un o altre projecte. 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 ''run.sh'' contindrà les i instruccions adients per engegar un o altre projecte.
 +
 +==== Arxius de posada en marxa del server ====
 +
 +<WRAP important>
 +''run.sh'' (o ''run.bat'' en Windows) està a l'arrel del projecte, és a dir, al mateix nivell que la carpeta ''.test''
 +</WRAP>
 +
 +
 +<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 sense browser 
-cordova run browser+cordova serve
 </file> </file>
 +
 +<tabbox Versió Windows>
 +
 +=== run.sh per a Cordova ===
 +<file bash run.bat>
 +cordova serve
 +</file>
 +
 +</tabbox>
  
 \\ \\
Línia 116: Línia 136:
  
         // run server and setup driver         // run server and setup driver
-        await this.runServer( "../run.sh", [] );+        await this.runServer( "../run", [] );
         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=="win32" ) {         if( process.platform=="win32" ) {
-            this.cmd = spawn(command,options,{shell:true});+            this.cmd = spawn(command+".bat",options,{shell:true});
         } else {         } else {
             // linux, macos (darwin), or other             // linux, macos (darwin), or other
-            this.cmd = spawn(command,options);+            this.cmd = spawn(command+".sh",options);
         }         }
  
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 ''alert'' que ens avisa. Aquest exemple testeja que si deixem buit el nom, ens surt un ''alert'' que ens avisa.
  
-<file javascript 02-nom-buit.js>+<file javascript 00-nom-buit.js>
 // carreguem les llibreries // carreguem les llibreries
 const { BaseTest } = require("./BaseTest.js") const { BaseTest } = require("./BaseTest.js")
Línia 291: Línia 311:
 </file> </file>
  
 +
 +\\
 +
 +
 +==== 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 ''dotenv'' de NPM, pel què caldrà que la instal·lis:
 +
 +  $ npm install dotenv
 +
 +I crear un arxiu ''.env'' com aquest:
 +  URL=http://localhost:8000
 +  HEADLESS=false
 +  USUARI=el-meu-username
 +  CONTRASENYA=la-contrasenya-secreta
 +</WRAP>
 +
 +<file javascript 02-login-ok.js>
 +
 +// carreguem les llibreries
 +const { BaseTest } = require("./BaseTest.js")
 +const { By, until } = require("selenium-webdriver");
 +const assert = require('assert');
 +
 +//.env
 +require('dotenv').config()
 +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+"/admin/login/");
 +
 +        // 1 cercar login box
 +        let usernameInput = await driver.wait(until.elementLocated(
 +                By.id('id_username')), 10000);
 +        let passwordInput = await driver.wait(until.elementLocated(
 +                By.id('id_password')), 10000);
 +
 +        // 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('input[value="Iniciar sessió"]')), 10000);
 +        sendButton.click()
 +
 +        // 4 comprovem que hem entrat
 +        let logoutButton = await driver.wait(until.elementLocated(
 +                By.xpath('//button[@type="submit"]')), 10000);
 +        var currentLogoutText = await logoutButton.getText();
 +        var expectedText = "FINALITZAR SESSIÓ";
 +        
 +        // 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="+currentLogoutText+"\n\tTEXT ESPERAT="+expectedText);
 +
 +        console.log("TEST OK");
 +    }
 +}
 +
 +// executem el test
 +
 +(async function test_example() {
 + const test = new MyTest();
 + await test.run();
 + console.log("END")
 +})();
 +</file>
  
 \\ \\
Línia 309: Línia 409:
 // emprem this.driver per utilitzar Selenium // emprem this.driver per utilitzar Selenium
  
-class MyTest extends BaseTest+class AddTaskTest extends BaseTest
 { {
  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("END")  console.log("END")
 })(); })();
 </file> </file>
 +
 +<WRAP todo>
 +Crea un test ''DelTaskTest'' similar a l'anterior que:
 +  * Crei 3 tasques amb noms aleatoris.
 +  * Esborri una d'elles.
 +  * Comprovi que no existeix la tasca esborrada i sí que romanen les altres dues.
 +</WRAP>
 +
 +===== 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'usuari proporcionat
 +  * 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>
 +
 +<WRAP todo>
 +Crea un dels següents tests que t'assigni el professor:
 +[[Django Test #exercicis_de_test_amb_django_tutorial]]
 +</WRAP>
 +
  
nodejs_selenium.1706128201.txt.gz · Darrera modificació: 2024/01/24 20:30 per enric_mieza_sanchez