Protractor Typescript error - TypeError: Cannot read property 'username' of undefined
Protractor Typescript error - TypeError: Cannot read property 'username' of undefined
我正在尝试使用 Typescript.In 页面对象在 Protractor 中编写登录测试我已经定义了元素,但在引用它们时出现错误。我用 Javascript 编写了相同的测试,它工作正常。我不确定我在这里做错了什么
login.po.ts 文件
export class LoginPage {
username = element(by.id('userName'));
password = element(by.id('password'));
loginbtn = element(by.id('login'));
loginmsg = element(by.id('login-message'));
}
import { browser } from "protractor";
import {LoginPage} from '../PageObjects/login.po';
describe('Login', function () {
let loginpg: LoginPage;
beforeEach(() => {
let loginpg = new LoginPage();
});
it('should show incorrect credentials error', async () => {
browser.get("https://example.com/");
loginpg.username.sendKeys("test@test.com");
loginpg.password.sendKeys("fsdf");
loginpg.loginbtn.click();
expect(loginpg.loginmsg.toEqual('Incorrect username or password'));
})
});
需要在beforeEach
函数中赋值而不是声明新变量。
describe('Login', function () {
let loginpg: LoginPage; // --> declare
beforeEach(() => {
loginpg = new LoginPage(); // --> assign
});
//...
});
您必须调用 getText
方法来获取元素的文本。
另外,您错过了 )
.
如果您禁用了控制流,则必须为每个命令添加 await
。
解决方案:
describe('Login', function () {
let loginpg: LoginPage;
beforeEach(() => {
loginpg = new LoginPage();
});
it('should show incorrect credentials error', async () => {
await browser.get("https://example.com/");
await loginpg.username.sendKeys("test@test.com");
await loginpg.password.sendKeys("fsdf");
await loginpg.loginbtn.click();
expect(await loginpg.loginmsg.getText()).toEqual('Incorrect username or password'));
});
});
我正在尝试使用 Typescript.In 页面对象在 Protractor 中编写登录测试我已经定义了元素,但在引用它们时出现错误。我用 Javascript 编写了相同的测试,它工作正常。我不确定我在这里做错了什么
login.po.ts 文件
export class LoginPage {
username = element(by.id('userName'));
password = element(by.id('password'));
loginbtn = element(by.id('login'));
loginmsg = element(by.id('login-message'));
}
import { browser } from "protractor";
import {LoginPage} from '../PageObjects/login.po';
describe('Login', function () {
let loginpg: LoginPage;
beforeEach(() => {
let loginpg = new LoginPage();
});
it('should show incorrect credentials error', async () => {
browser.get("https://example.com/");
loginpg.username.sendKeys("test@test.com");
loginpg.password.sendKeys("fsdf");
loginpg.loginbtn.click();
expect(loginpg.loginmsg.toEqual('Incorrect username or password'));
})
});
需要在beforeEach
函数中赋值而不是声明新变量。
describe('Login', function () {
let loginpg: LoginPage; // --> declare
beforeEach(() => {
loginpg = new LoginPage(); // --> assign
});
//...
});
您必须调用 getText
方法来获取元素的文本。
另外,您错过了 )
.
如果您禁用了控制流,则必须为每个命令添加 await
。
解决方案:
describe('Login', function () {
let loginpg: LoginPage;
beforeEach(() => {
loginpg = new LoginPage();
});
it('should show incorrect credentials error', async () => {
await browser.get("https://example.com/");
await loginpg.username.sendKeys("test@test.com");
await loginpg.password.sendKeys("fsdf");
await loginpg.loginbtn.click();
expect(await loginpg.loginmsg.getText()).toEqual('Incorrect username or password'));
});
});