2016-07-06 20 views
2

Ich bin neu im Winkelmesser. Kann mir bitte jemand für das datengetriebene Testen mit dem Winkelmesser helfen. Unten finden Sie den Code, die Konfigurationsdatei und die Datei testdata.json.Datengetriebene Prüfung im Winkelmesser

'use strict'; 

var testData = require('../example/Test Data/Test.json'); 

describe('LoginPage', function() { 

var loginData = require('../example/Test Data/Test.json'); 

testData.forEach(function (data) { 
    it("data.description", function (data) { 
     browser.get("http://127.0.0.1:8080/#/login"); 
element(by.model("username")).sendKeys(data.username); 
element(by.model("password")).sendKeys(data.passwordField); 
element(by.buttonText("Authenticate")).click(); 

}); 
}); 
}); 

Config-Datei:

// An example configuration file. 
exports.config = { 
directConnect: true, 

//seleniumAddress: 'http://localhost:4444/wd/hub', 
// Capabilities to be passed to the webdriver instance. 
capabilities: { 
'browserName': 'chrome' 

}, 

// Framework to use. Jasmine is recommended. 
framework: 'jasmine', 

// Spec patterns are relative to the current working directory when 
// protractor is called. 
specs: ['Testpage.js'], 

// Options to be passed to Jasmine. 
jasmineNodeOpts: { 
defaultTimeoutInterval: 30000 
} 
}; 

Json Datei:

[ 
{ 
"username": "admin", 
"passwordField": "admin" 
}, 

{ 
"username": "admin1", 
"passwordField": "admin2" 
} 
] 

Problem ist, dass anstatt Daten zu nehmen, es undefiniert in allen Eingabefeldern schreibt. Bitte Hilfe

+0

es wie ein Array von Objekten sucht, die Sie in Ihren Testdaten erhalten haben! –

Antwort

1

ich seine eine Array von Objekten gehe davon aus, können Sie jedes Array-Element durchlaufen und direkten Zugriff auf seinen Inhalt und Sie brauchen nicht testdata.forEach(), Sie so etwas wie dies versuchen könnte -

'use strict'; 

var testData = require('../example/Test Data/Test.json'); 

describe('LoginPage', function() { 

var loginData = require('../example/Test Data/Test.json'); 


it("data.description", function() { 
    browser.get("http://127.0.0.1:8080/#/login"); 
    element(by.model("username")).sendKeys(testData[0].username); 
    element(by.model("password")).sendKeys(testData[0].passwordField); 
    element(by.buttonText("Authenticate")).click(); 

    }); 
    }); 
}); 

Ich habe den obigen Code nicht getestet und Sie sollten Page Objects verwenden anstatt sie direkt in Ihren Tests zu verwenden!

+0

Ja, offensichtlich sollte Page-Objekt der Ansatz für jeden Test sein. Mein Fokus lag jedoch auf dem datengesteuerten Ansatz in meinen Tests, also habe ich einen einfachen erstellt. Nun, vielen Dank, es hat für mich funktioniert. Kannst du mich bitte von wo bekomme ich etwas Zeug in Bezug auf Winkelmesser –

4

Wir haben ein Jasmine-Data-Provider-Paket, das uns beim datengetriebenen Testen mit Protractor hilft.

Code Snippet: 

var using = require(‘jasmine-data-provider); 
var loginData = require('../example/Test Data/Test.json'); 


describe('Data driven test spec', function() { /*define sets of input data as array in method called arrayOfData*/ 
    function arrayOfData() { 
     return [ 
       { 
       "username": "admin", 
       "passwordField": "admin" 
       }, 

      { 
       "username": "admin1", 
       "passwordField": "admin2" 
       } 
      ] 
     //or return loginData json object here 
    } /*below one will loop the test case based on data size and pass single data set every time till complete the end of array*/ 

using(arrayofData, function (inputData) { 
    it('test case logic to be executed for each set of data', function() { 
     browser.get("http://127.0.0.1:8080/#/login"); 
     element(by.model("username")).sendKeys(inputData.username); 
     element(by.model("password")).sendKeys(inputData.passwordField); 
     element(by.buttonText("Authenticate")).click(); 
    }); 
    }); 
}); 

HINWEIS: Wenn Jasmin-Daten-Provider-Paket noch nicht in Ihrem Computer installiert ist, fügen Sie es installieren, indem Sie unter Befehl ausführen, bevor Testskript laufen soll.

npm install jasmine-data-provider 
+0

Hallo Suresh, Es gibt mir Fehler 'Modul: Jasmin-Daten-Provider nicht gefunden'. Können Sie bitte helfen –

+0

@ SahilSehgal, Fehler sagt, dass Jasmine-Data-Provider-Paket noch nicht auf Ihrem Computer installiert ist. Installieren Sie den Jasmine-Daten-Provider, indem Sie den Befehl "_npm install jasmine-data-provider_" von der Eingabeaufforderung oder dem Terminal ausführen. Es wird klappen. –

+0

@SureshSalloju schönes Paket, wusste nicht, dass es existiert. Jetzt haben wir von 'Array.map()' zu 'using' gewechselt. Vielen Dank! – alecxe

1

Ein einfacherer Ansatz Kartenfunktion:

var testParams = testConfig.testArray; 
testParams.map(function(testdata) { 
     it('write your test here', function() { 
      console.log('Username: ', testData.username); 
     }); 
}); 
+0

nett n einfach thx – danday74

+1

Sie sind herzlich willkommen! –

0

Ich denke, Ihr Ansatz durchaus sinnvoll ist. Der Grund, warum Sie undefiniert sind, liegt darin, dass Sie Daten in den Parameter 'done' setzen. Es legt Daten für das 'done'-Objekt fest, das übergeben wird, wenn die' it'-Funktion die von Ihnen definierte Funktion aufruft.

testData.forEach(function (data) { it("data.description", function (data) {

sollte

testData.forEach(function (data) { it("data.description", function() {