javascript - 量角器茉莉花测试中的异步代码执行
问题描述
我有下面的 jasmine 测试用例,我想将从函数 getAllUsageCategoriesDropListElements 返回的值存储到一个数组中,以便我可以访问测试用例中的数组并用另一个数组评估它的内容。
it('Validate the Usage Category droplist values matches with the Usage Categories Table',() => {
let allUsageCategoryDropListElements: string[] = [];
additionalCostsPage.getAllUsageCategoriesDropListElements(
element => {
console.log("Text from the usage Cateory Droplist elements " + element);
allUsageCategoryDropListElements.push(element);
console.log(" from inside " + allUsageCategoryDropListElements.length);
}
);
console.log("Size of the array is " +allUsagCategoryDropListElements.length );
});
方法如下:
getAllUsageCategoriesDropListElements(evaluationFunc: (element: string) => void) : void {
E2EUtil.click(this.addAdditionalCostDialogue.usageCategoryField);
E2EUtil.waitFor(this.addAdditionalCostDialogue.usageCategoryDropListContainer);
browser.sleep(2000);
var usageCategoryFromPage: string[] = [];
element.all(by.xpath("//*[@id='usageCategory']/div/div[3]/div/ul/li[*]/span"))
.each(function (element, index) {
element.getText().then(function (text){
// console.log("text extracted is " + text);
usageCategoryFromPage.push(text);
})
})
.then(function(){
usageCategoryFromPage.forEach(evaluationFunc);
});
}
在函数内部打印的数组大小正确递增,但在它外部打印时为 0。我认为这是因为异步代码执行。有人可以帮忙吗?我对这个打字稿世界很陌生。
解决方案
要使用 await 运行代码,您需要正确添加async
andawait
关键字。尝试:
it('Validate the Usage Category droplist values matches with the Usage Categories Table', async () => {
let allUsageCategoryDropListElements: string[] = [];
await additionalCostsPage.getAllUsageCategoriesDropListElements(
element => {
console.log("Text from the usage Cateory Droplist elements " + element);
allUsageCategoryDropListElements.push(element);
console.log(" from inside " + allUsageCategoryDropListElements.length);
}
);
console.log("Size of the array is " +allUsagCategoryDropListElements.length );
});
编辑:您getAllUsageCategoriesDropListElements
不是异步的,但您正在使用承诺。您可以对其进行更新以使其异步,然后您await/async
的调用函数将正常工作。
尝试:
async getAllUsageCategoriesDropListElements(evaluationFunc: (element: string) => void) : void {
E2EUtil.click(this.addAdditionalCostDialogue.usageCategoryField);
E2EUtil.waitFor(this.addAdditionalCostDialogue.usageCategoryDropListContainer);
browser.sleep(2000);
var usageCategoryFromPage: string[] = [];
let elements = element.all(by.xpath("//*[@id='usageCategory']/div/div[3]/div/ul/li[*]/span"));
for(var i = 0; i < elements.length; i++) {
let element = elements[i];
let text = await element.getText();
// console.log("text extracted is " + text);
usageCategoryFromPage.push(text);
}
usageCategoryFromPage.forEach(evaluationFunc);
}
推荐阅读
- html - 如何在卡片外部溢出y时固定卡片引导程序内部的位置?
- r - 处理 R 中的错误并作为响应的一部分发送到 UI
- python - Beautiful Soup - 迭代表行
- javascript - 在javascript中查找值的范围
- reactjs - 如何在单个 React 项目中同时实现 SSR 和 CSR
- python - 在 Python 中根据日期训练测试拆分,这可能吗?
- botframework - 使用 Graph API 在 Microsoft Teams 的机器人通道中将消息作为机器人发送给用户
- spring - Open API Spec3 - 如何显示下拉菜单或从多个输入中选择输入的方式?
- c++ - 静态成员变量(指针)的构造函数和析构函数
- java - 在 Procfile 中写什么?