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'));
  });
});