Sahil Sehgal Sahil Sehgal - 4 months ago 607
JSON Question

Data-Driven Testing in Protractor

I am new to protractor. Can anyone please guide me for data driven testing using protractor. Below is the code, config file and testdata.json file.

'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 file:

// 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 File:

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

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


Issue is that instead of taking data , it is writing undefined in all input boxes. Please Help

Answer

I am assuming its an Array of objects, you can iterate each array element and directly access its contents and you don't need testdata.forEach(), you could try something like this -

 '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();

   });
  });
 });  

I haven't tested the above code and you should use Page Objects rather than directly using them in your tests!

Comments