[英]Async code execution in protractor jasmine test
我在下面的茉莉花測試用例中,我想將函數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
和await
關鍵字。 嘗試:
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
不是異步的,但您正在使用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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.