量角器-首先,它会由于给出一些误导性错误而始终失败

时间:2019-02-11 12:50:34

标签: typescript jasmine protractor

我用非角度登录页面编写了针对角度应用的量角器测试。所以我用browser.waitForAngularEnabled(false);

在单独的登录文件中添加了该登录名

,然后添加带有一系列it块的describe块以测试应用程序。 每当我运行第一个程序块时,它总是失败。然后,我删除了主体并运行。在这里它也失败,并带有一些误导性错误- NoSuchElementError: No element found using locator: By(css selector, *[id="Username"])

此错误实际上与登录功能有关。但是到那时它已经成功通过了。这个问题背后的原因是什么?

我的代码结构是

 describe("Test Cases in first feature ", () => {
      //login via non angular application
      login.SignIn(settings.usercredentials.LocalUser.userName, settings.usercredentials.LocalUser.password);

      it("dummy tc", () => {

      });

     it("New Mission Creation", () => {
 main_dashboard_page.newItem("mission");
 });

1 个答案:

答案 0 :(得分:1)

不包含在it块中的代码将不会按照您期望的顺序执行,并且该代码生成的任何问题也将不会像您通常期望的那样处理。您的登录功能代码将在该页面上的任何其他代码之前运行,这很可能是导致问题的原因。对于这样的登录功能,建议将其包含在beforeAll或beforeEach(或它自己的)中。

我有一个具有非角度登录的类似应用程序,并且正在以以下方式(使用async / await语法)对其进行处理

beforeAll(async function () {
    //before any tests run we want to launch the URL and log in

    await browser.waitForAngularEnabled(false);
    await loginPO.loginToApplication(browser.params.login.username, browser.params.login.password, browser.params.loginSite.url);

    //I create some additional logic to ensure login was successful before re-enabling angular wait
    await browser.waitForAngularEnabled(true);
});

非异步/等待方式

beforeAll(function () {
    //before any tests run we want to launch the URL and log in

    browser.waitForAngularEnabled(false);
    loginPO.loginToApplication(browser.params.login.username, browser.params.login.password, browser.params.loginSite.url);

    //I create some additional logic to ensure login was successful before re-enabling angular wait
    browser.waitForAngularEnabled(true);
});

更新后的答案:

it('login before tests execute', () => {
    browser.waitForAngularEnabled(false);
    loginPO.loginToApplication(browser.params.login.username, browser.params.login.password, browser.params.loginSite.url);

    //You can create additional logic to ensure login successful
    browser.waitForAngularEnabled(true);
})