nhrcpt
nhrcpt

Reputation: 872

Protractor - adding a count function returns ""both angularJS testability and angular testability are undefined..." error

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

Answers (1)

DublinDev
DublinDev

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

Related Questions