I'm working on writing some protractor tests for my Angular component and keep getting an error "unknown error: angular is not defined" when I try to use by.model to select the input element.
Its odd because if I do this it works fine and pases:
it('should have an input element for searching', () => {
    var inputElement = element(by.model('searchText');
    expect(inputElement).toBeDefined();
});
But when I try to do something like this it fails with the angular undefined error:
it('should filter the search text', () => {
     var inputElement = element(by.model('searchText');
     expect(inputElement).toBeDefined();
     inputElement.clear()
     inputElement.click();
     inputElement.sendKeys('ICBC');
     var tableLengthRow = element.all(by.css('.animate-repeat').count();
     expect(tableLength).toBe(1);
});
If I replace this line:
var inputElement = element(by.model('searchText');
with this one:
var inputElement = element.all(by.tagName('input')).get(0);
and leave the rest as I have it the test passes.
Does anyone know why the first test above works with by.model but not the second one where I am actually clicking on the element?
And then how can I define angular on the page using Webpack and npm?
Thanks
by.model is not supported in Angular (angular2, angular4 and on).
The recommended alternative is by.css().
As per angular/protractor's current readme:
Protractor works with AngularJS versions greater than 1.0.6/1.1.4, and is compatible with Angular applications. Note that for Angular apps, the
by.binding()andby.model()locators are not supported. We recommend usingby.css().
Examples of the alternative at Angular Guide - E2E Tests:
Previous code               New code         Notes
by.model('$ctrl.query')     by.css('input')  The model matcher relies on AngularJS ng-model
by.model('$ctrl.orderProp') by.css('select') The model matcher relies on AngularJS ng-model
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With