延长器在测试场景结束时执行非测试操作



我正在编写我的第一个Protractor测试场景,我正在发现承诺的神秘世界。但我真的不能理解一件事。以下是我的测试结果:

let stuff = "Some data I pick up from a CSV file"
describe("Foo", function () {
browser.waitForAngularEnabled(false) // maybe not a relevant piece of information to share but how knows
for (let i of testdata) {
it("Bar", function () {
browser.driver.manage().window().maximize();
browser.get(browser.baseUrl)
doStuff1()
let usefulCalculatedData = doStuff2(stuff)
doStuff3()
storeThisStuffInACSVFile(usefulCalculatedData);
})
}
})
function doStuff2(stuff){
var today = new Date()
let usefulCalculatedData = today.getFullYear().toString()
+ today.getMonth() + 1
+ today.getDate()
+ today.getHours()
+ stuff
doActualStuff(usefulCalculatedData)
return usefulCalculatedData
}

我期待着";storeThisStuffInACSVFile";以在CCD_ 1结束时运行。但实际上,它是在测试一开始就运行的!这意味着doStuff2()的某些部分被称为。。。顺便说一下,所有的测试都执行得很好。我真的很困惑,因为我不知道如何强制执行我想要的订单。

提前感谢您的帮助。

利用等待的力量:

let stuff = "Some data I pick up from a CSV file"
describe("Foo", function () {
browser.waitForAngularEnabled(false) // maybe not a relevant piece of information to share but how knows
for (let i of testdata) {
it("Bar", async function () {
await browser.driver.manage().window().maximize();
await browser.get(browser.baseUrl)
doStuff1()
let usefulCalculatedData = doStuff2(stuff)
doStuff3()
storeThisStuffInACSVFile(usefulCalculatedData);
})
}
})
function doStuff2(stuff){
var today = new Date()
let usefulCalculatedData = today.getFullYear().toString()
+ today.getMonth() + 1
+ today.getDate()
+ today.getHours()
+ stuff
doActualStuff(usefulCalculatedData)
return usefulCalculatedData
}

确保在配置文件中禁用selenium promise

exports.config = {

...
SELENIUM_PROMISE_MANAGER: false,
...

};

现在您不必进行promise链接,而是使用wait,在量角器中,每个proser函数都是promise。

我找到了一个结合async/await&承诺。我不知道它是否很标准,但是。。。它有效。。。

let stuff = "Some data I pick up from a CSV file"
describe("Foo", function () {
browser.waitForAngularEnabled(false) // maybe not a relevant piece of information to share but how knows
for (let i of testdata) {
it("Bar", function () {
browser.driver.manage().window().maximize();
browser.get(browser.baseUrl)
doStuff1()
let usefulCalculatedData = doStuff2(stuff)
// EDITED HERE
doStuff3().then(function()
{storeThisStuffInACSVFile(usefulCalculatedData);
});
})
}
})
function doStuff2(stuff){
var today = new Date()
let usefulCalculatedData = today.getFullYear().toString()
+ today.getMonth() + 1
+ today.getDate()
+ today.getHours()
+ stuff
doActualStuff(usefulCalculatedData)
return usefulCalculatedData
}
// EDITED HERE
async function doStuff3(){
var whateverOutput = await whatever()
return Promis.resolve(usefulCalculatedData !== null)
}

最新更新