量角器在测试场景结束时执行非测试动作
Protractor execute non-test action in the end of the test scenario
我正在编写我的第一个 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
}
我希望 it
末尾的 运行 步骤“storeThisStuffInACSVFile”。但实际上,在测试的最开始是运行!这意味着 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 链接而是使用 await,在量角器中每个 proser 函数都是一个 promise。
我找到了结合 async/await 和 promises 的解决方案。我不知道它是否非常标准但是......它有效......
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)
}
我正在编写我的第一个 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
}
我希望 it
末尾的 运行 步骤“storeThisStuffInACSVFile”。但实际上,在测试的最开始是运行!这意味着 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 链接而是使用 await,在量角器中每个 proser 函数都是一个 promise。
我找到了结合 async/await 和 promises 的解决方案。我不知道它是否非常标准但是......它有效......
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)
}