【问题标题】:Protractor: Unable to call exported function within the same module量角器:无法在同一模块中调用导出的函数
【发布时间】:2016-11-24 05:18:09
【问题描述】:

我使用量角器编写了一个导出模块。它内部定义了多个功能。 现在,我想在同一个模块的另一个函数中调用其中一个导出函数。 我的模块如下所示。

module.exports = {
    read_page_number_data: function {
        // code here
    },
    read_page_data: function {
        this.read_page_number_data().then(function () {
            // Code here.
        });
    },
    check_link_present: function {
        // code here
    },
    click_link: function {
        this.check_link_present().then(function () {
            // Code here.
        });
    },
}

现在,当我在测试脚本中调用 read_page_data 函数时,出现以下错误。

失败:this.read_page_number_data 不是函数。

我已经尝试了以下问题中给出的所有选项。还是没有成功。

protractor calling an exported function within the same module

注意:在调用 read_page_data 函数之前,我正在调用 click_link 函数,该函数在内部调用 check_link_present 函数。但是这个调用工作正常,并且 check_link_present 函数可以从 click_link 函数正确调用。在此之后,控件导航到链接中给出的页面。

【问题讨论】:

  • 您应该在前缀“this”。导出模块中的所有方法“read_page_number_data”。它应该像'this.read_page_number_data'
  • 感谢@SureshSalloju 的回复。但是,当我给“这个”加上前缀时。在所有功能中,我得到以下错误 [21:33:56] I/launcher - 运行 1 个 WebDriver 实例 [21:34:01] E/launcher - 错误:C:\uiauto\lib\search_lib.js:4 this.enter_search_key_home_page: function (key) { ^ SyntaxError: Unexpected token .
  • 你可以试试下面我的回答吗

标签: javascript protractor


【解决方案1】:

一种解决方案是将对象分配给特定于您的模块的变量。 例如

module.exports = myModule = {
    //...
}

然后您可以使用myModule.read_page_number_data() 等在模块中调用您的函数。

你可以找到一个例子JSFiddle here

注意this 上下文

要记住的一点是,this 可以根据父函数的调用方式更改其上下文,这可能是它适用于 click_link 但不适用于 read_page_data 的原因。

您可以找到有关this 关键字here 的更多信息。

【讨论】:

  • 谢谢 Matthias .. 这个解决方案似乎对我有用。现在函数正在从其他函数调用。
  • 太棒了!如果有帮助,请考虑接受它作为答案。
【解决方案2】:

为什么不尝试如下。这是页面对象模型测试框架的最佳实践之一。

var PageName = function(){
              this.firstMethod = function(){
                //logic
              };
              this.secodnMethod = function(){
                //logic
              };
  }

module.exports = new PageName();

【讨论】:

  • 即使我也尝试过这种方式。仍然会出现同样的问题。我得到了同样的旧错误。
  • 您在哪个文件中访问以及您如何访问?
  • 谢谢苏雷什。以下解决方案对我有用。实际上我已经定义了一个页面库模块。然后从测试脚本中调用这些函数。但是页面模块中的一个特定函数需要调用同一模块中的另一个函数......这就是它失败的地方。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
相关资源
最近更新 更多