【问题标题】:Using Custom Functions with "I" in Page Object and Custom Helper in CodeceptJS在页面对象中使用带有“I”的自定义函数和在 CodeceptJS 中使用自定义助手
【发布时间】:2019-03-11 17:29:20
【问题描述】:

您好 CodeceptJS 社区,

  • 有没有办法像一样使用自定义函数(在steps_file.js下)。页面对象文件中的 customFunction()

  • 有没有办法在我的自定义帮助文件中使用本机 codeceptjs 函数(如 I.click()

我在文档和其他来源中找不到任何帮助。有什么方法可以实现吗?

  • 有没有办法在 puppeteer 助手中使用 xpath 定位器?

    this.helpers['Puppeteer'].page.click(xpath);

【问题讨论】:

  • 问题是,什么是“我”?
  • 抱歉标题。我以为我的问题在 CodeceptJS 部分。标题已更正。

标签: helper puppeteer pageobjects codeceptjs


【解决方案1】:

我在 pageObjects 中使用自定义步骤时遇到了同样的问题。 为了避免这种情况,我将演员 (I) 作为参数传递给我的 pageObject 函数。

页面对象:

const I = actor();

       module.exports = {

           doSomething(I){
                 I.login();
           }
};

测试场景:

Scenario('Test something' (I,pageObject)=>{
     pageObject.doSomething(I)
})

在这种情况下,pageObjects 将可以访问来自 I 的所有自定义步骤 :)

【讨论】:

    【解决方案2】:

    感谢您分享马修斯。我使用了不同的解决方案。我没有在每个页面对象方法中编写“I”对象(这也是我的一个选择),而是创建了一个自定义帮助文件并使用 puppeteer 帮助程序编写所有方法,如下所示;

    async method() {
        await this.helpers['Puppeteer'].click(xpath);
    }
    

    我可以在测试和页面对象中调用这个方法

    I.method();
    

    【讨论】:

    • 问题是,如何启用async method(path) { I.click(path) }
    【解决方案3】:

    我遇到了同样的问题,当我查看 typescripts 定义时,我注意到每个页面对象等都需要 actor() 具有自定义步骤参数。

    所以这对我来说可以使用自定义步骤表单 steps_file.js 扩展 const I = actor();

    const customSteps = require('./steps_file');
    const I = actor(customSteps());
    

    之后,我可以使用页面对象中的所有方法,例如在从 steps_file.js 访问方法的测试场景中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-26
      • 2011-04-09
      • 2016-01-29
      • 2013-06-27
      • 1970-01-01
      • 2018-08-10
      • 1970-01-01
      • 2019-11-19
      相关资源
      最近更新 更多