【发布时间】:2017-04-21 15:49:31
【问题描述】:
我正在为 Angular 2 网站自动执行 Web UI 测试。但是,当我想检查登录步骤是否成功时遇到了问题。即使我为注销按钮输入了错误的密码或错误的 XPath,它也总是通过。
当我们成功登录时,这个元素才存在。正如我之前提到的,我故意为 btt_Logout 输入了错误的密码甚至错误的 xpath(xbutton 不是按钮),所以这个元素不能存在,但它仍然是真的。
即使我尝试了很多东西,我也不明白问题出在哪里。我只是将 toBe(true) 更改为 toBe(false) 但它仍然通过:)。似乎这个期望不起作用。我不明白为什么
import {browser, ExpectedConditions as EC, $, $$, element,by} from 'protractor'
import { Login } from '../page_objects/login.page';
import { helper } from '../helpers/helper'
declare let expect:any;
describe('Testing Login ', function () {
beforeEach(async () => {
})
it('Go to loginpage', async function () {
//Go to Login Page
Login.openHomePage();
});
it('Login to the page', async function () {
//Enter username, password and press OK. It work well.
Login.login("admin","admin@123");
//Waiting to see btt_Logout. Problems in here. It always true even i make XPath of btt_Logout wrong or make password wrong. I check/
browser.wait(EC.presenceOf(Login.btt_Logout), 30000).then(function () {
expect((Login.btt_Logout).isPresent()).toBe(true);
}, function (error) {
expect(true).toBe(false);
});
});
afterAll(()=> {
helper.cleanUp();
console.warn(`Test finished!`)
})
})
登录页面对象:
import {browser, ExpectedConditions as EC, $, $$, element, by, ElementFinder} from 'protractor'
import {BasePage} from './base.page'
require('../helpers/waitReady.js');
class LoginPage extends BasePage {
//Internal element
protected txt_LoginUsername: ElementFinder = element(by.id('username'));
protected txt_LoginPassword: ElementFinder = element(by.id('password'));
protected btt_LoginSubmit: ElementFinder = element(by.xpath("//button[contains(@class,'btn-submit')]"));
//External element
public login(Username, Password) {
this.txt_LoginUsername.sendKeys(Username);
this.txt_LoginPassword.sendKeys(Password);
this.btt_LoginSubmit.click();
}
}
export const Login = new LoginPage();
基本页面:
import {browser, ExpectedConditions as EC, $, $$, element, by, ElementFinder} from 'protractor'
require('../helpers/waitReady.js');
export abstract class BasePage {
protected url: string = '' // Will be same as baseUrl by default.
public btt_Logout: ElementFinder = element(by.xpath("//xbutton[contains(@class,'btn-logout')]"));
async openHomePage() {
return await browser.get(this.url)
}
async openUrl(webUrl) {
return await browser.get(webUrl)
}
}
结果: 开始
茉莉花开始:
» 测试登录 ▻ 进入登录页面 . ✓ 转到登录页面(16 秒) ▻ 登录页面 . ✓ 登录页面(0.234 s) 测试完成!
2 种规格,0 次失败 在 16.599 秒内完成
- 总结 *
在 17 秒内执行了 2 个规范中的 2 个
PASSED 2 ( 100% )
FAILED 0 ( 0% )
SKIPPED 0 ( 0% )
[22:38:58] I/launcher - 0 个 WebDriver 实例仍在运行 [22:38:58] I/launcher - chrome #01 通过了
【问题讨论】:
标签: angularjs angular jasmine protractor javascript-objects