量角器在测试场景结束时执行非测试动作

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)
}