Javascript 忽略量角器中的异步等待

Javascript 忽略量角器中的异步等待,javascript,selenium-webdriver,protractor,Javascript,Selenium Webdriver,Protractor,一般来说,我对测试和JS都是新手。我正在尝试编写我的第一个异步等待测试,但我无法使它工作 我已设置了量角器.promise.USE\u promise\u MANAGER=false;要能够使用异步等待 当我将selenium promise manager设置为false时,我收到了预期的错误TypeError:无法创建托管承诺实例:selenium\u promise\u manager环境变量已禁用承诺管理器:未定义。 然而,当我向代码中的所有抽象层添加AsyncWait时,同样的错误仍然

一般来说,我对测试和JS都是新手。我正在尝试编写我的第一个异步等待测试,但我无法使它工作

我已设置了
量角器.promise.USE\u promise\u MANAGER=false
;要能够使用
异步等待

当我将selenium promise manager设置为false时,我收到了预期的错误
TypeError:无法创建托管承诺实例:selenium\u promise\u manager环境变量已禁用承诺管理器:未定义。

然而,当我向代码中的所有抽象层添加AsyncWait时,同样的错误仍然存在。如何使用
async await
使以下测试工作

login.spec.js

protractor.promise.USE_PROMISE_MANAGER = false;

describe('Login page :', () => {
  const loginPage = new objects.Login(),
        el = new objects.Element(),
        ec = new objects.ExpectedCondition()


  beforeAll( async () => {
    await loginPage.go();
  });

  describe('with invalid credentials', () => {

    beforeEach( async () => {
      await browser.refresh();
    }); 

    it('should fail to log in without credentials', async () => {
      await loginPage.submit();

      await expect(ec.isVisible(loginPage.selectors.login.errors.lblEmailValidation));
      await expect(ec.isVisible(loginPage.selectors.login.errors.lblPasswordValidation));
    });
class Login {
  ...
  async submit() {
    await this.element.clickElement(this.selectors.login.button.btnSubmit)
  }
  ...
}
class Element {
...
  async clickElement(selector) {
    return await this.getElement(selector).click();
  }
...
}
const EC = protractor.ExpectedConditions;

class ExpectedCondition {
  constructor() {
   this.el = new objects.Element();
  }

 async isVisible(selector) {
    return await browser.wait(EC.visibilityOf(this.el.getElement(selector)));
  }
}
class Element {
  getElement(selector) {
    return element(by.css(selector));
  }
  ...
}
login.po.js

protractor.promise.USE_PROMISE_MANAGER = false;

describe('Login page :', () => {
  const loginPage = new objects.Login(),
        el = new objects.Element(),
        ec = new objects.ExpectedCondition()


  beforeAll( async () => {
    await loginPage.go();
  });

  describe('with invalid credentials', () => {

    beforeEach( async () => {
      await browser.refresh();
    }); 

    it('should fail to log in without credentials', async () => {
      await loginPage.submit();

      await expect(ec.isVisible(loginPage.selectors.login.errors.lblEmailValidation));
      await expect(ec.isVisible(loginPage.selectors.login.errors.lblPasswordValidation));
    });
class Login {
  ...
  async submit() {
    await this.element.clickElement(this.selectors.login.button.btnSubmit)
  }
  ...
}
class Element {
...
  async clickElement(selector) {
    return await this.getElement(selector).click();
  }
...
}
const EC = protractor.ExpectedConditions;

class ExpectedCondition {
  constructor() {
   this.el = new objects.Element();
  }

 async isVisible(selector) {
    return await browser.wait(EC.visibilityOf(this.el.getElement(selector)));
  }
}
class Element {
  getElement(selector) {
    return element(by.css(selector));
  }
  ...
}
element.js

protractor.promise.USE_PROMISE_MANAGER = false;

describe('Login page :', () => {
  const loginPage = new objects.Login(),
        el = new objects.Element(),
        ec = new objects.ExpectedCondition()


  beforeAll( async () => {
    await loginPage.go();
  });

  describe('with invalid credentials', () => {

    beforeEach( async () => {
      await browser.refresh();
    }); 

    it('should fail to log in without credentials', async () => {
      await loginPage.submit();

      await expect(ec.isVisible(loginPage.selectors.login.errors.lblEmailValidation));
      await expect(ec.isVisible(loginPage.selectors.login.errors.lblPasswordValidation));
    });
class Login {
  ...
  async submit() {
    await this.element.clickElement(this.selectors.login.button.btnSubmit)
  }
  ...
}
class Element {
...
  async clickElement(selector) {
    return await this.getElement(selector).click();
  }
...
}
const EC = protractor.ExpectedConditions;

class ExpectedCondition {
  constructor() {
   this.el = new objects.Element();
  }

 async isVisible(selector) {
    return await browser.wait(EC.visibilityOf(this.el.getElement(selector)));
  }
}
class Element {
  getElement(selector) {
    return element(by.css(selector));
  }
  ...
}
expectedCondition.js

protractor.promise.USE_PROMISE_MANAGER = false;

describe('Login page :', () => {
  const loginPage = new objects.Login(),
        el = new objects.Element(),
        ec = new objects.ExpectedCondition()


  beforeAll( async () => {
    await loginPage.go();
  });

  describe('with invalid credentials', () => {

    beforeEach( async () => {
      await browser.refresh();
    }); 

    it('should fail to log in without credentials', async () => {
      await loginPage.submit();

      await expect(ec.isVisible(loginPage.selectors.login.errors.lblEmailValidation));
      await expect(ec.isVisible(loginPage.selectors.login.errors.lblPasswordValidation));
    });
class Login {
  ...
  async submit() {
    await this.element.clickElement(this.selectors.login.button.btnSubmit)
  }
  ...
}
class Element {
...
  async clickElement(selector) {
    return await this.getElement(selector).click();
  }
...
}
const EC = protractor.ExpectedConditions;

class ExpectedCondition {
  constructor() {
   this.el = new objects.Element();
  }

 async isVisible(selector) {
    return await browser.wait(EC.visibilityOf(this.el.getElement(selector)));
  }
}
class Element {
  getElement(selector) {
    return element(by.css(selector));
  }
  ...
}
element.js

protractor.promise.USE_PROMISE_MANAGER = false;

describe('Login page :', () => {
  const loginPage = new objects.Login(),
        el = new objects.Element(),
        ec = new objects.ExpectedCondition()


  beforeAll( async () => {
    await loginPage.go();
  });

  describe('with invalid credentials', () => {

    beforeEach( async () => {
      await browser.refresh();
    }); 

    it('should fail to log in without credentials', async () => {
      await loginPage.submit();

      await expect(ec.isVisible(loginPage.selectors.login.errors.lblEmailValidation));
      await expect(ec.isVisible(loginPage.selectors.login.errors.lblPasswordValidation));
    });
class Login {
  ...
  async submit() {
    await this.element.clickElement(this.selectors.login.button.btnSubmit)
  }
  ...
}
class Element {
...
  async clickElement(selector) {
    return await this.getElement(selector).click();
  }
...
}
const EC = protractor.ExpectedConditions;

class ExpectedCondition {
  constructor() {
   this.el = new objects.Element();
  }

 async isVisible(selector) {
    return await browser.wait(EC.visibilityOf(this.el.getElement(selector)));
  }
}
class Element {
  getElement(selector) {
    return element(by.css(selector));
  }
  ...
}
我得到的错误:

Failures:
1) Login page : with invalid credentials should fail to log in without credentials
  Message:
    TypeError: Unable to create a managed promise instance: the promise manager has been disabled by the SELENIUM_PROMISE_MANAGER environment variable: undefined
  Stack:
    TypeError: Unable to create a managed promise instance: the promise manager has been disabled by the SELENIUM_PROMISE_MANAGER environment variable: undefined
        at new ManagedPromise (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1030:13)
        at new Deferred (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:1454:20)
        at new Task (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2778:5)
        at ControlFlow.execute (/usr/local/lib/node_modules/protractor/node_modules/selenium-webdriver/lib/promise.js:2477:16)
        at UserContext.<anonymous> (/usr/local/lib/node_modules/protractor/node_modules/jasminewd2/index.js:94:19)
故障:
1) 登录页面:具有无效凭据的用户在没有凭据的情况下应无法登录
信息:
TypeError:无法创建托管承诺实例:承诺管理器已被SELENIUM\u promise\u manager环境变量禁用:未定义
堆栈:
TypeError:无法创建托管承诺实例:承诺管理器已被SELENIUM\u promise\u manager环境变量禁用:未定义
在新的ManagedPromise(/usr/local/lib/node_modules/dragrator/node_modules/selenium webdriver/lib/promise.js:1030:13)
在新的延迟时间(/usr/local/lib/node_modules/dragrator/node_modules/selenium webdriver/lib/promise.js:1454:20)
在新任务中(/usr/local/lib/node_modules/dragrator/node_modules/selenium webdriver/lib/promise.js:2778:5)
在ControlFlow.execute(/usr/local/lib/node_modules/dragrator/node_modules/selenium webdriver/lib/promise.js:2477:16)
在UserContext。(/usr/local/lib/node_modules/dragrator/node_modules/jasminewd2/index.js:94:19)
1)您应该删除您的
量角器.promise.USE\u promise\u MANAGER=false
来自
login.spec.js
*.spec.js
文件中的所有位置

2) 您应该更新您的
量角器.conf
文件:

config = {
...
SELENIUM_PROMISE_MANAGER: false,
}
1) 您应该删除
量角器.promise.USE\u promise\u MANAGER=false
来自
login.spec.js
*.spec.js
文件中的所有位置

2) 您应该更新您的
量角器.conf
文件:

config = {
...
SELENIUM_PROMISE_MANAGER: false,
}

此设置似乎不会从一组测试更新到另一组测试。我们在不同的路径中有两组测试,每个测试都有单独的dragrator.conf文件,其中一组为false。除此PROMISE\u管理器外,所有设置均被选中。我们颠倒顺序,第一个设置规则第二个测试集。请随意在量角器中创建关于SO和/或问题的新问题。此设置似乎不会从一组测试更新到另一组测试。我们在不同的路径中有两组测试,每个测试都有单独的dragrator.conf文件,其中一组为false。除此PROMISE\u管理器外,所有设置均被选中。我们颠倒顺序,第一个设置规则第二个测试集。请随意在量角器回购中创建关于SO和/或问题的新问题