Reputation: 1319
I can't click on some css locator in order to manipulate a "math floor" on him. Please your help.
The CSS part of this test:
<input ng-attr-id="industry_{{$index}}" ng-attr-value="{{$index}}" ng-model="stateData.currentIndustryIndex" type="radio" class="ng-pristine ng-valid" name="00K" id="industry_0" value="0">
This is my test -
it ('onboarding - screen 2', function() {
browser.driver.wait(by.css('.industry input[type="radio"]'), 10000);
element (by.css('.industry input[type="radio"]'))[Math.floor(Math.random() * (12 - 0 + 1))].click();
//element(by.css("li.ng-scope.icon-laptop > label.ng-binding")).click();
browser.driver.sleep(1000);
//element(by.xpath("//div[1]/div/main/div[3]/section/div/form/div[1]/section[2]/div/ul/li[4]/label")).click();
browser.driver.sleep(2000);
//element(by.css('input.btn')).click();
browser.driver.sleep(3000);
//Capture Screenshoot
browser.driver.takeScreenshot().then(function(data){
var base64Data = data.replace(/^data:image\/png;base64,/,"");
var fs = require("fs");
fs.writeFile("onboarding-screen2.png", base64Data, 'base64', function(err) {
if(err) console.log(err);
});
});
});
});
Protractor configuration file
var path = require('path');
//var reporters = require('jasmine-reporters');
var HtmlReporter = require('protractor-html-screenshot-reporter');
var fs = require("fs");
exports.config = {
chromeDriver: 'node_modules/protractor/selenium/chromedriver',
chromeOnly: false,
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['demo.js'],
//specs: ['./Scripts/*.js'],
capabilities: {
browserName: 'chrome',
'chromeOptions': {
args: ['--test-type','--memory-metrics','--console','--crash-on-failure','--load-extension=' + 'C:\\Users\\idan\\AppData\\Local\\Google\\Chrome\\User Data\\Default\\Extensions\\idgpnmonknjnojddfkpgkljpfnnfcklj\\1.2.4_0']
}
},
rootElement: '.main',
framework: "jasmine",
allScriptsTimeout: 10000,
getPageTimeout: 10000,
onPrepare: function() {
browser.driver.manage().window().maximize();
return browser.driver.get('http://www.vcita.com');
jasmine.getEnv().addReporter(new HtmlReporter({
baseDirectory: 'C:\\Users\\idan\\AppData\\Roaming\\npm\\node_modules\\protractor\\example',
docTitle: 'my reporter',
docName: 'protractor-demo-tests-report.html'
}));
// var jasmineReporters = require('jasmine-reporters');
// jasmine.getEnv().addReporter(new jasmineReporters.JUnitXmlReporter({
// consolidateAll: true,
// filePrefix: 'xmloutput',
// savePath: 'C:\\Users\\idan\\AppData\\Roaming\\npm\\node_modules\\protractor\\example\\screenshots'
// }));
},
jasmineNodeOpts: {
onComplete: null,
// If true, display spec names.
isVerbose: true,
// If true, print colors to the terminal.
showColors: true,
// If true, include stack traces in failures.
includeStackTrace: true,
// Default time to wait in ms before a test fails.
defaultTimeoutInterval: 660000
}
}
Package.json
{
"name": "protractor",
"description": "Webdriver E2E test wrapper for Angular.",
"homepage": "https://github.com/angular/protractor",
"keywords": [
"angular",
"test",
"testing",
"webdriver",
"webdriverjs",
"selenium"
],
"author": {
"name": "Julie Ralph",
"email": "[email protected]"
},
"dependencies": {
"request": "~2.36.0",
"selenium-webdriver": "2.45.1",
"minijasminenode": "1.1.1",
"jasminewd": "1.1.0",
"jasminewd2": "0.0.3",
"jasmine": "2.1.1",
"saucelabs": "~0.1.0",
"glob": "~3.2",
"adm-zip": "0.4.4",
"optimist": "~0.6.0",
"q": "1.0.0",
"lodash": "~2.4.1",
"source-map-support": "~0.2.6",
"html-entities": "~1.1.1",
"accessibility-developer-tools": "~2.6.0"
},
"devDependencies": {
"expect.js": "~0.2.0",
"chai": "~1.8.1",
"chai-as-promised": "~4.1.0",
"jshint": "2.5.0",
"mocha": "1.21.4",
"cucumber": "~0.3.3",
"express": "~3.3.4",
"lodash": "~2.4.1",
"rimraf": "~2.2.6"
},
"repository": {
"type": "git",
"url": "git://github.com/angular/protractor.git"
},
"bin": {
"protractor": "bin/protractor",
"webdriver-manager": "bin/webdriver-manager"
},
"main": "lib/protractor.js",
"scripts": {
"pretest": "jshint lib spec scripts",
"test": "node scripts/test.js",
"start": "node testapp/scripts/web-server.js"
},
"license": "MIT",
"version": "2.0.0",
"gitHead": "1d8f14eb7e3fd7c8607ef1ffa2d6c0b29cc802b1",
"bugs": {
"url": "https://github.com/angular/protractor/issues"
},
"_id": "[email protected]",
"_shasum": "2f96219bb4517006eaadd5757a06608630464ebc",
"_from": "protractor@*",
"_npmVersion": "1.4.28",
"_npmUser": {
"name": "angularcore",
"email": "[email protected]"
},
"maintainers": [
{
"name": "juliemr",
"email": "[email protected]"
},
{
"name": "angularcore",
"email": "[email protected]"
}
],
"dist": {
"shasum": "2f96219bb4517006eaadd5757a06608630464ebc",
"tarball": "http://registry.npmjs.org/protractor/-/protractor-2.0.0.tgz"
},
"directories": {},
"_resolved": "https://registry.npmjs.org/protractor/-/protractor-2.0.0.tgz",
"readme": "ERROR: No README data found!"
}
** The exception from Node.JS**
Failures:
1) Login onboarding - screen 2
Message:
TypeError: Cannot read property 'click' of undefined
Stacktrace:
TypeError: Cannot read property 'click' of undefined
at [object Object].<anonymous> (C:\Users\idan\AppData\Roaming\npm\node_modul
es\protractor\example\demo.js:49:100)
at C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_modules\ja
sminewd\index.js:94:14
at [object Object].promise.ControlFlow.runInFrame_ (C:\Users\idan\AppData\Ro
aming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdriver\
promise.js:1877:20)
at [object Object].promise.ControlFlow.runEventLoop_ (C:\Users\idan\AppData\
Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\webdrive
r\promise.js:1755:8)
at [object Object].<anonymous> (C:\Users\idan\AppData\Roaming\npm\node_modul
es\protractor\node_modules\selenium-webdriver\lib\webdriver\promise.js:2056:12)
at goog.async.run.processWorkQueue (C:\Users\idan\AppData\Roaming\npm\node_m
odules\protractor\node_modules\selenium-webdriver\lib\goog\async\run.js:125:21)
From: Task: Asynchronous test function: it()
at [object Object].<anonymous> (C:\Users\idan\AppData\Roaming\npm\node_modul
es\protractor\node_modules\jasminewd\index.js:93:33)
at [object Object].<anonymous> (C:\Users\idan\AppData\Roaming\npm\node_modul
es\protractor\node_modules\minijasminenode\lib\async-callback.js:45:37)
at [object Object].jasmine.Block.execute (C:\Users\idan\AppData\Roaming\npm\
node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:1174:1
7)
at [object Object].jasmine.Queue.next_ (C:\Users\idan\AppData\Roaming\npm\no
de_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2209:31)
at onComplete (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\nod
e_modules\minijasminenode\lib\jasmine-1.3.1.js:2205:18)
at [object Object].jasmine.WaitsForBlock.execute (C:\Users\idan\AppData\Roam
ing\npm\node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.j
s:2704:5)
at [object Object]._onTimeout (C:\Users\idan\AppData\Roaming\npm\node_module
s\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:2718:12)
Error
at [object Object].<anonymous> (C:\Users\idan\AppData\Roaming\npm\node_modul
es\protractor\example\demo.js:47:2)
at [object Object].jasmine.Env.describe_ (C:\Users\idan\AppData\Roaming\npm\
node_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:913:21
)
at [object Object].jasmine.Env.describe (C:\Users\idan\AppData\Roaming\npm\n
ode_modules\protractor\node_modules\minijasminenode\lib\jasmine-1.3.1.js:898:15)
at describe (C:\Users\idan\AppData\Roaming\npm\node_modules\protractor\node_
modules\minijasminenode\lib\jasmine-1.3.1.js:658:27)
at Object.<anonymous> (C:\Users\idan\AppData\Roaming\npm\node_modules\protra
ctor\example\demo.js:3:1)
Finished in 17.105 seconds
3 tests, 3 assertions, 1 failure
[launcher] 0 instance(s) of WebDriver still running
[launcher] chrome #1 failed 1 test(s)
[launcher] overall: 1 failed spec(s)
[launcher] Process exited with error code 1
Upvotes: 2
Views: 4009
Reputation: 13533
It seems that your input of type radio is missing the industry class.
When it is added the test should work, here is a link the code below tested in a jsfiddle, it's with Jasmine and a jqLite selector but you get the picture.
describe('Test with industry class',function(){
beforeEach(module('testApp'));
var element, scope;
beforeEach(inject(function($rootScope, $compile) {
element = angular.element('<div><input ng-attr-id="industry_{{$index}}" ng-attr-value="{{$index}}" ng-model="stateData.currentIndustryIndex" type="radio" class="industry ng-pristine ng-valid" name="00K" id="industry_0" value="0"></div>');
scope = $rootScope;
$compile(element)(scope);
scope.$digest();
}));
it("should contain a input of type radio element with a class of industry", function() {
expect(element.find('.industry').length).toEqual(1);
});
});
Upvotes: 1