【问题标题】:Protractor using setter to fill several elements量角器使用setter填充几个元素
【发布时间】:2018-12-16 18:28:55
【问题描述】:

美好的一天!

由于#2969,我正在关闭 Protractor jasmine conf 中的 SELENIUM_PROMISE_MANAGER

在我的 PageObject 方法中,我有一个 setter,它使 textBox 元素中的“sendKeys”从对象字面量传递给这个 setter,例如:

set informationSection(object) {
   for (let element in object) {
      this[element].sendKeys(object[element]);
   }
}

在测试用例中:

it('description of spec', async() => {
   const information = {
       field1: 'Field 1 description,
       field2: 'Field 2 description,
   };

   await mainPage.openInformationDialod();

   //Here need to call setter
   mainPage.informationSection = information;

   await mainPage.apply();
})

在这个例子中,我希望首先从 setter 中“sendKeys”,然后是“apply”方法。 但是 setter 是同步工作的,有时会在“mainPage.apply()”之后完成。

在使用量角器控制流程的情况下没有这样的问题。 有人知道允许将 setter 推入异步堆栈的解决方法吗?

提前谢谢你。

【问题讨论】:

    标签: typescript jasmine async-await protractor getter-setter


    【解决方案1】:

    你也应该awaitsendKeys()

    set async informationSection(object) {
       for (let element in object) {
          await this[element].sendKeys(object[element]);
       }
    }
    

    【讨论】:

    • 但是 typescript 中的 setter 不能使用 async 关键字。
    • 改成普通函数 ;)
    • 什么意思?是的,我可以将 Object.defineProperty 与 set 一起使用:async function(...) {...} 但是如何在设置属性时使用“await”? “await mainPage.informationSection = information”这样的构造也是无效的
    • 类似的问题,如何在 setter 和 async/await 中只填充单个 web 元素。像 mainPage.lastName = "John Smith",其中 lastName 是属性,它具有带有“sendKeys”的设置器。我对删除量角器中的承诺管理器的愿望感到惊讶,因为很明显,某些方法无法实施......
    猜你喜欢
    • 2020-07-07
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多