Reputation: 872
I am trying to create loop for the button clicks on the app. to do so I need to count the number of rows in the table where the buttons are present. So I created this script:
require('..\\waitAbsent.js');
require("../node_modules/jasmine-expect/index.js");
var EC = protractor.ExpectedConditions;
describe('Demo_Test For count', function() {
beforeAll(function () {
browser.driver.manage().window().maximize();
browser.get(globalVariables.loginMain);
globalVariables.Email_Input_box.sendKeys(globalVariables.Demo_User);
globalVariables.Password_Input_Box.sendKeys(globalVariables.Demo_PWD);
globalVariables.Submit_Button.click();
browser.wait(EC.invisibilityOf(globalVariables.Submit_Button), 25000, 'submit button is not disappearing yet');
});
it('Dashboard Title Validation', function () {
expect(globalVariables.ESY_DB_Label.isDisplayed());
expect(globalVariables.ESY_DB_Label.getText()).toEqual('HomePage')
});
//count block
globalVariables.tableData_Dashboard.all(by.tagName("tr")).count().then(function (Count) {
console.log('\n the count of the rows are ' + Count + '\n');
});
//count block end
it("1+1", function () {
let i = 1;
let j = i + i;
expect(j).toBe(2);
})
});
When I run this script, all the tests fails , even the 2nd one where I just added 1+1! The log is as follows:
Student Enrollment Page Content Validation 1+1
Message:
Error: Error while waiting for Protractor to sync with the page: "both angularJS testability and angular testability are undefined. This could be either because this is a non-angular page or because your test involves client-side
navigation, which can interfere with Protractor's bootstrapping. See https://github.com/angular/protractor/issues/2643 for details"
Stack:
Error: Error while waiting for Protractor to sync with the page: "both angularJS testability and angular testability are undefined. This could be either because this is a non-angular page or because your test involves client-side
navigation, which can interfere with Protractor's bootstrapping. See https://github.com/angular/protractor/issues/2643 for details"
at runWaitForAngularScript.then (C:\ESY_Desktop_V_2\node_modules\protractor\built\browser.js:463:23)
at ManagedPromise.invokeCallback_ (C:\ESY_Desktop_V_2\node_modules\selenium-webdriver\lib\promise.js:1376:14)
at TaskQueue.execute_ (C:\ESY_Desktop_V_2\node_modules\selenium-webdriver\lib\promise.js:3084:14)
at TaskQueue.executeNext_ (C:\ESY_Desktop_V_2\node_modules\selenium-webdriver\lib\promise.js:3067:27)
at asyncRun (C:\ESY_Desktop_V_2\node_modules\selenium-webdriver\lib\promise.js:2927:27)
at C:\ESY_Desktop_V_2\node_modules\selenium-webdriver\lib\promise.js:668:7
at process._tickCallback (internal/process/next_tick.js:68:7)
But if I comment out the block for count , the test runs smoothly. What is the cause of this error? How can I fix it?
Upvotes: 0
Views: 47
Reputation: 2348
Code not contained within an it block will be hoisted to the top and run before any it block has started, meaning your test will likely not be in the expected state at that time. Try writing your code once more but with your count block within an it.
require('..\\waitAbsent.js');
require("../node_modules/jasmine-expect/index.js");
var EC = protractor.ExpectedConditions;
describe('Demo_Test For count', function () {
beforeAll(function () {
browser.driver.manage().window().maximize();
browser.get(globalVariables.loginMain);
globalVariables.Email_Input_box.sendKeys(globalVariables.Demo_User);
globalVariables.Password_Input_Box.sendKeys(globalVariables.Demo_PWD);
globalVariables.Submit_Button.click();
browser.wait(EC.invisibilityOf(globalVariables.Submit_Button), 25000, 'submit button is not disappearing yet');
});
it('Dashboard Title Validation', function () {
expect(globalVariables.ESY_DB_Label.isDisplayed());
expect(globalVariables.ESY_DB_Label.getText()).toEqual('HomePage')
});
it("1+1", function () {
//count block
globalVariables.tableData_Dashboard.all(by.tagName("tr")).count().then(function (Count) {
console.log('\n the count of the rows are ' + Count + '\n');
});
//count block end
let i = 1;
let j = i + i;
expect(j).toBe(2);
})
});
Upvotes: 1