2017-09-19 89 views
-1

我遇到问题。在app.e2e-spec.ts中,它将我移至登录页面。文件中有方法,它调用 。当您点击SignIn按钮时,它将返回仪表板页面的标题。就像登录失败一样。然而,他得到的消息:找不到定位器量角器

should be able to login 
- Failed: Timed out waiting for asynchronous Angular tasks to finish after 11 seconds. This may be because the current page is not an Angular application. Please see the FAQ for more details: https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular 
While waiting for element with locator - Locator: By(css selector, h2) 

在此页面的元素看起来是这样的:

<h2 _ngcontent-c5 = ""> Dashboard API </h2> 

app.e2e-spec.ts

it('should show login page',() => { 
page.navigateToHome(); 
page.maximizeWindow(); 
expect(page.getLoginBoxTitle()).toEqual('Sign In'); 
}); 

it('should be able to login',() => { 
page.navigateToHome(); 
page.login(); 
expect(page.getPageTitle()).toEqual('Dashboard API'); 
page.navigateToDashboard(); 
}); 

app.po.ts

login() { 
element(by.name('username')).sendKeys('[email protected]'); 
element(by.name('password')).sendKeys('test123'); 
element(by.buttonText('SignIn')).click(); 
} 

loginIfNotLoggedIn() { 
if (element.all(by.css('.login-box')).length > 0) { 
    this.login(); 
} else { 
    console.info('Already logged in'); 
} 
} 

getLoginBoxTitle() { 
return element(by.css('h2')).getText(); 
} 

getPageTitle() { 
return element 
    .all(by.css('h2')) 
    .last() 
    .getText(); 
} 

dashboard.e2e-spec.ts

it('should get api status',() => { 
login.browserSleep(); 
page.navigateToDashboard(); 
login.loginIfNotLoggedIn(); 
page.getStatusAPI(); 
page.navigateToApplications(); 
}); 

回答

0

在量角器5和角度2/4之后,异步行为在量角器中被改变。

您需要使用async ANS await形式告诉角度等到角加载到浏览器中启动您的测试之前

async login(name: string, pwd: string) { 
    await this.username.sendKeys(name); 
    await this.password.sendKeys(pwd); 
    await this.loginButton.click(); 
    return browser.wait(protractor.ExpectedConditions.not(protractor.ExpectedConditions.urlContains('returnUrl'))); 
} 

然后同时调用登录方法,你应该说await login()

相关问题