Javascript 忽略量角器中的异步等待
一般来说,我对测试和JS都是新手。我正在尝试编写我的第一个异步等待测试,但我无法使它工作 我已设置了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时,同样的错误仍然
量角器.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和/或问题的新问题