2016-11-24 78 views
1

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

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功能。在此之后,控件导航到链接中给出的页面。

+0

你应该在此前加'this。'。导出模块中的所有方法'read_page_number_data'。它应该像'this.read_page_number_data' –

+0

谢谢@SureshSalloju的答复。但是,当我以“这个”为前缀时。在所有的功能,我得到以下错误 [21:33:56]我/启动器 - 运行1个WebDriver实例 [21:34:01] E/launcher - 错误:C:\ uiauto \ lib \ search_lib .js:4 this.enter_search_key_home_page:function(key){ ^ SyntaxError:意外的标记。 –

+0

你可以试试我的答案如下 –

回答

0

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

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

然后你就可以用myModule.read_page_number_data()

模块内调用您的函数,您可以找到一个例子JSFiddle here

注上this方面

有一点要记住的是,this可以根据父函数是如何调用改变它的背景下,这可能是为什么它正在为click_link,但不是read_page_data

你可以在this关键字here找到更多的信息。

+0

感谢Matthias ..这个解决方案似乎对我有用。现在函数正在从其他函数调用。 –

+0

太棒了!如果它有帮助,请考虑接受它作为答案。 –

0

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

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

module.exports = new PageName(); 
+0

即使我这样试过。仍然出现同样的问题。我得到了同样的旧错误。 –

+0

在哪个文件中访问以及如何访问? –

+0

谢谢苏雷什。下面的解决方案为我工作。其实我已经定义了一个页面库模块。然后这些函数从测试脚本中调用。但是页面模块中的一个特定函数需要调用同一模块内的其他函数......这就是失败的地方。 –

相关问题