我需要什么
在CodeceptJS中以Nightmare作为主要助手进行E2E测试,以验证元素的存在,并根据结果继续执行一系列操作或其他操作。
示例代码:
class EventsHelper extends Helper {
isExistsElement(selector) {
let browser = this.helpers['Nightmare'].browser;
return browser.evaluate((selector) => {
return new Promise(resolve => {
let element = document.querySelector(selector);
resolve(element || false);
});
}, selector);
}
}
module.exports = EventsHelper;
Scenario('Test 1', async (I) => {
const isButtonRendered = await I.isExistsElement('#button');
if (isButtonRendered) {
I.see('Message that is displayed only if the button exists.');
I.click('#button');
} else {
I.see('Alternative message that appears if this button does not exist.');
}
});
此示例代码的当前结果是: -如果按钮存在。
Evaluation timed out after 30000msec. Are you calling done() or resolving your promises?
我愿意提出解决问题的建议,更正或其他想法。 谢谢你们! (如果我的英语不太清楚,请原谅)。
答案 0 :(得分:0)
根据codeceptjs开发人员的介绍,您必须为条件本身使用自定义帮助程序,它们不支持主要的scennario函数内部的条件。
这是一个自定义帮助程序示例:
'use strict';
import assert from 'assert';
let Helper = codecept_helper;
class MyHelper extends Helper {
async clickIfVisible(selector, ...options) {
const helper = this.helpers['Puppeteer'];
try {
const numVisible = await helper.grabNumberOfVisibleElements(selector);
if (numVisible) {
return helper.click(selector, ...options);
}
} catch (err) {
console.log('Skipping operation as element is not visible');
}
}
}
module.exports = MyHelper;