如何在我们创建文件的同一文件中调用this.function

问题描述 投票:1回答:1

在我的项目中,我们尝试构建量角器框架。所以在js文件中我们使用this.functionname语法创建了一些函数,我们希望在函数中需要时再使用该函数,该函数也存在于同一文件中。为了清晰的视图,我给出了以下代码...

这是我的可重用函数JS文件

var fb=require("H:/workspace/Protractor_PT/src/pages/FbPage.js");
var action=function(){

    beforeAll(function(){
        browser.ignoreSynchronization=true;
        browser.get("https://facebook.com");
        login();
    });

    this.clickElement=function(element){
        element.click();
    }

    this.enterText=function(element,text){
        element.sendKeys(text);
    }

    var login=function(){
        action.enterText(fb.emailField(),"dfdsfds");
        action.enterText(fb.passfield(),"dfdsfds");
    }
}
module.login=new action();

在上面,你可以找到函数this.clickElement和this.enterText ..我想在名为login的其他函数中使用那些函数..但是当我用“action.enterText”调用这些函数时 - action是主要的全局变量该文件...我正在低于错误

错误日志

 Message:
    Failed: action.enterText is not a function
  Stack:
    TypeError: action.enterText is not a function
        at login (H:\workspace\Protractor_PT\src\pages\Utilities.js:19:13)
        at UserContext.<anonymous> (H:\workspace\Protractor_PT\src\pages\Utilities.js:7:3)
        at C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\node_modules\jasminewd2\index.js:112:25
        at new ManagedPromise (C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:1077:7)
        at ControlFlow.promise (C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2505:12)
        at schedulerExecute (C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\node_modules\jasminewd2\index.js:95:18)
        at TaskQueue.execute_ (C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:3084:14)
        at TaskQueue.executeNext_ (C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:3067:27)
        at asyncRun (C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:2974:25)
        at C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\promise.js:668:7
    From: Task: Run beforeAll in control flow
        at UserContext.<anonymous> (C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\node_modules\jasminewd2\index.js:94:19)
        at Jasmine.execute (C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\node_modules\jasmine\lib\jasmine.js:200:12)
        at C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\built\frameworks\jasmine.js:132:15
        at Function.promise (C:\Users\DELL\AppData\Roaming\npm\node_modules\protractor\node_modules\q\q.js:682:9)
    From asynchronous test:
    Error
        at new action (H:\workspace\Protractor_PT\src\pages\Utilities.js:4:2)
        at Object.<anonymous> (H:\workspace\Protractor_PT\src\pages\Utilities.js:23:14)
        at Module._compile (module.js:643:30)
        at Object.Module._extensions..js (module.js:654:10)
        at Module.load (module.js:556:32)
        at tryModuleLoad (module.js:499:12)
        at Function.Module._load (module.js:491:3)
        at Module.require (module.js:587:17)
        at require (internal/module.js:11:18)

1 spec, 1 failure
Finished in 0.049 seconds

[20:22:32] I/launcher - 0 instance(s) of WebDriver still running
[20:22:32] I/launcher - chrome #01 failed 1 test(s)
[20:22:32] I/launcher - overall: 1 failed spec(s)
[20:22:32] E/launcher - Process exited with error code 1
javascript node.js selenium-webdriver protractor
1个回答
-1
投票

在您创建内部函数的情况下,变量操作对于它们是未知的。您可以执行一个指向父函数的局部变量,并使用它而不是操作。

你可以这样做:

var fb = require('H:/workspace/Protractor_PT/src/pages/FbPage.js')
var action = function () {
    var localAction = this;    // <<<-----------   HERE
    beforeAll(function () {
        browser.ignoreSynchronization = true
        browser.get('https://facebook.com')
        login()
    })
    this.clickElement = function (element) {
        element.click()
    }
    this.enterText = function (element, text) {
        element.sendKeys(text)
    }
    var login = function () {
        localAction.enterText(fb.emailField(), 'dfdsfds') // Use local var here.
        localAction.enterText(fb.passfield(), 'dfdsfds')
    }
}
module.login = new action()
© www.soinside.com 2019 - 2024. All rights reserved.