Testing non-angular pages with Protractor can be tricky regarding material expectations.
I suggest you upgrade Protractor to last (1.5.0 at the moment), use the waitReady () user-defined function , which browser.wait is ready for the elements and rewrites your test, as shown below. Notice you can put everything in 1 spec if you like it.
// TODO: use page objects var searchBtnElm = $('#search'); // use element(by.id('search')) if you prefer it('waits for the elements present and visible (non-angular)', function() { expect(searchBtnElm.waitReady()).toBeTruthy(); }); it('should click Search button', function() { searchBtnElm.click(); }); it('wait for more results', function() { // keep using waitReady() before interacting with the elements // and before performing expectations on them });
More on why waitReady here .
Note. Remember to set synchronization ignore to test your angular page:
browser.ignoreSynchronization = true;
You can set it before the browser.get page is not angular.
I suggested setting high implicit wait in the past, for example
browser.manage().timeouts().implicitlyWait(5000);
This hack avoids waitReady and continues to use the standard
expect(searchBtnElm.isPresent()).toBeTruthy();
But it has an ugly flaw when testing elements NOT , i.e. when testing missing or invisible elements, in which case he will wait 5 seconds (5000 ms) in a weather vane, for example. by doing
expect(someNonExistingElm.isPresent()).toBeFalsy();