A Jasmine spec timed out. Resetting the WebDriver Control Flow - when redirect to new page

若如初见. 提交于 2019-12-04 04:29:48

OK, I have resolved this issue by myself, but not sure why element and browser don't work. I have changed

expect(element(by.css('body')).getText()).toContain('Welcome Test User');

to

expect(browser.driver.findElement(by.css('body')).getText()).toContain('Welcome Test User');

So I have changed element to browser.driver.findElement and everything works.

I don't know why it happens, but it works :)

UPD

As I understand, browser.driver.findElement - is not angular way and we should use it if we use non-angular pages. Although I use angular it seems that element and browser doesn't re-initialize. Some info I found here http://engineering.wingify.com/posts/angularapp-e2e-testing-with-protractor/#test-both-angularjs-and-non-angularjs-based-pages

Jasmine has timeout for each spec i.e. each it in jasmine framework. so if any spec (it) exceeds jasmine spec's default timeout then it fails that spec.

Solution: To override jasmine spec timeout for one individual spec, pass a third parameter to it: it(description, testFn, timeout_in_millis)

it('description of test case', function() {
   /*your test 
               steps
                    here*/
},120000);//120 seconds timeout for this spec

more information on timeouts is here

You are getting timeout because you've injected a param into it callback and never called that (read more on that here). You should remove the param, or call it when the test is over. Basically, you don't do any custom async stuff, so you don't need it.

So the question is how I can wait when my page will reload and check url?

I'd suggest that you waited for a specific element on index.php page:

it('should login and redirect to overview page with CR Operators rights', function() {
    element(by.model('username')).clear().sendKeys('testuser');
    element(by.model('password')).clear().sendKeys('test');
    element(by.css('[type="submit"]')).click();
    browser.wait(protractor.until.elementLocated(by.css('Log out'));
    expect(element(by.css('body')).getText()).toContain('Hello, you are Logged In!');
});
 jasmineNodeOpts: { defaultTimeoutInterval: 260000 } 

for me this works after including this in conf.js

expect(element(by.cssContainingText('body', 'Hello, you are Logged In!')).isPresent()).toBeTruthy();

expect(element.all(by.cssContainingText('body', 'Hello, you are Logged In!')).get(2).isPresent()).toBeTruthy();
  • If you have more than one time the same text in body in array then
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!