Protractor 在带有量角器的非角度现场使用预期条件会导致;类型错误:无法读取属性';绑定&x27;“未定义”的定义;

Protractor 在带有量角器的非角度现场使用预期条件会导致;类型错误:无法读取属性';绑定&x27;“未定义”的定义;,protractor,webdriverjs,Protractor,Webdriverjs,当我对通过量角器的元素对象返回的webelements使用预期条件时,我看到了以下问题。我也尝试了$,结果也是一样的。我正在ChromeV47的节点4.2.4上使用量角器3.1.1* “类型错误:无法读取未定义的属性“bind” 在询问之前,我搜索了论坛,了解到使用driver.findElement将预期条件与selenium元素结合使用存在一些已知问题 然而,在使用元素对象本身时,我没有遇到类似的问题 我们有一个非角度的应用程序登录页面,这将切换到角度,登录后。因此,我已将ignoreSy

当我对通过量角器的元素对象返回的webelements使用预期条件时,我看到了以下问题。我也尝试了$,结果也是一样的。我正在ChromeV47的节点4.2.4上使用量角器3.1.1*

“类型错误:无法读取未定义的属性“bind”

在询问之前,我搜索了论坛,了解到使用driver.findElement将预期条件与selenium元素结合使用存在一些已知问题

然而,在使用元素对象本身时,我没有遇到类似的问题

我们有一个非角度的应用程序登录页面,这将切换到角度,登录后。因此,我已将ignoreSynchronization设置为true,并计划在登录后将其重置为false。下面是示例代码,敬请社区指教

页面对象文件

module.exports = {
    login: element(by.model('credentials.username')),
    password: element(by.model('credentials.password')),
    user: "Email",
    passwd: "Password",
    goButton: $('input.btn.btn-primary'),
    EC: protractor.ExpectedConditions,
    go: function() {

    browser.get("Application URL",30000);
    browser.wait(this.EC.elementToBeClickable(this.login),30000);
    },
var VMPage = require('./LoginPage.js');


   describe('App Demo', function() {
    beforeEach(function() {
    console.log("Before Each Started");
    browser.driver.manage().timeouts().implicitlyWait(30000);
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 1800000;
    browser.ignoreSynchronization = true;
    VMPage.go();
    VMPage.login();
    });

    it('Test Case', function() {
       console.log("***Test Started***");

    });

});
下面是我的示例测试套件

module.exports = {
    login: element(by.model('credentials.username')),
    password: element(by.model('credentials.password')),
    user: "Email",
    passwd: "Password",
    goButton: $('input.btn.btn-primary'),
    EC: protractor.ExpectedConditions,
    go: function() {

    browser.get("Application URL",30000);
    browser.wait(this.EC.elementToBeClickable(this.login),30000);
    },
var VMPage = require('./LoginPage.js');


   describe('App Demo', function() {
    beforeEach(function() {
    console.log("Before Each Started");
    browser.driver.manage().timeouts().implicitlyWait(30000);
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 1800000;
    browser.ignoreSynchronization = true;
    VMPage.go();
    VMPage.login();
    });

    it('Test Case', function() {
       console.log("***Test Started***");

    });

});
报告的堆栈跟踪如下所示: 堆栈:

    TypeError: Cannot read property 'bind' of undefined
        at [object Object].ExpectedConditions.presenceOf (C:\Users\PJ\Ap
pData\Roaming\npm\node_modules\protractor\lib\expectedConditions.js:289:33)
        at [object Object].ExpectedConditions.visibilityOf (C:\Users\PJ\
AppData\Roaming\npm\node_modules\protractor\lib\expectedConditions.js:328:10)
        at [object Object].ExpectedConditions.elementToBeClickable (C:\Users\PJ0
0366401\AppData\Roaming\npm\node_modules\protractor\lib\expectedConditions.js:17
8:12)
        at Object.module.exports.go (D:\protractor_git\Demo\\Log
inPage.js:14:24)
        at Object.<anonymous> (D:\protractor_git\Demo\\LoginTest
.js:9:10)
        at C:\Users\PJ\AppData\Roaming\npm\node_modules\protractor\node_
modules\jasminewd2\index.js:96:23
        at new wrappedCtr (C:\Users\PJ\AppData\Roaming\npm\node_modules\
protractor\node_modules\selenium-webdriver\lib\goog\base.js:2468:26)
        at controlFlowExecute (C:\Users\PJ\AppData\Roaming\npm\node_modu
les\protractor\node_modules\jasminewd2\index.js:82:18)
    From: Task: Run beforeEach in control flow
        at Object.<anonymous> (C:\Users\PJ\AppData\Roaming\npm\node_modu
les\protractor\node_modules\jasminewd2\index.js:81:14)
        at attemptAsync (C:\Users\PJ\AppData\Roaming\npm\node_modules\pr
otractor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmine-core\jasmine
.js:1916:24)
        at QueueRunner.run (C:\Users\PJ\AppData\Roaming\npm\node_modules
\protractor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmine-core\jasm
ine.js:1871:9)
        at QueueRunner.execute (C:\Users\PJ\AppData\Roaming\npm\node_mod
ules\protractor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmine-core\
jasmine.js:1859:10)
        at Spec.Env.queueRunnerFactory (C:\Users\PJ\AppData\Roaming\npm\
node_modules\protractor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmi
ne-core\jasmine.js:697:35)
        at Spec.execute (C:\Users\PJ\AppData\Roaming\npm\node_modules\pr
otractor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmine-core\jasmine
.js:359:10)
        at Object.fn (C:\Users\PJ\AppData\Roaming\npm\node_modules\protr
actor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmine-core\jasmine.js
:2479:37)
        at attemptAsync (C:\Users\PJ\AppData\Roaming\npm\node_modules\pr
otractor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmine-core\jasmine
.js:1916:24)
        at QueueRunner.run (C:\Users\PJ\AppData\Roaming\npm\node_modules
\protractor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmine-core\jasm
ine.js:1871:9)
        at QueueRunner.execute (C:\Users\PJ\AppData\Roaming\npm\node_mod
ules\protractor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmine-core\
jasmine.js:1859:10)
    From asynchronous test:
    Error
        at Suite.<anonymous> (D:\protractor_git\Demo\\LoginTest.
js:3:2)
        at addSpecsToSuite (C:\Users\PJ\AppData\Roaming\npm\node_modules
\protractor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmine-core\jasm
ine.js:833:25)
        at Env.describe (C:\Users\PJ\AppData\Roaming\npm\node_modules\pr
otractor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmine-core\jasmine
.js:802:7)
        at jasmineInterface.describe (C:\Users\PJ\AppData\Roaming\npm\no
de_modules\protractor\node_modules\jasmine\node_modules\jasmine-core\lib\jasmine
-core\jasmine.js:3375:18)
        at Object.<anonymous> (D:\protractor_git\Demo\\LoginTest
.js:2:1)
TypeError:无法读取未定义的属性“bind”
位于[object object].ExpectedConditions.presenceOf(C:\Users\PJ\Ap
pData\Roaming\npm\node\u modules\dragrator\lib\expectedConditions.js:289:33)
位于[object object].ExpectedConditions.visibilityOf(C:\Users\PJ\
AppData\Roaming\npm\node\u modules\dragrator\lib\expectedConditions.js:328:10)
位于[object object].ExpectedConditions.ElementToBickable(C:\Users\PJ0
0366401\AppData\Roaming\npm\node\u modules\dragrator\lib\expectedConditions.js:17
8:12)
在Object.module.exports.go(D:\dragrator\u git\Demo\\Log
inPage.js:14:24)
反对。(D:\dragor\u git\Demo\\LoginTest
.js:9:10)
位于C:\Users\PJ\AppData\Roaming\npm\node\u modules\dragrator\node_
modules\jasminewd2\index.js:96:23
在新的WrappedTR(C:\Users\PJ\AppData\Roaming\npm\node\U模块\
量角器\node\u modules\selenium webdriver\lib\goog\base.js:2468:26)
在controlFlowExecute(C:\Users\PJ\AppData\Roaming\npm\node\u modu
les\dragrator\node\u modules\jasminewd2\index.js:82:18)
From:Task:runbeforeach在控制流中
反对。(C:\Users\PJ\AppData\Roaming\npm\node\u modu
les\dragrator\node\u modules\jasminewd2\index.js:81:14)
在attemptAsync(C:\Users\PJ\AppData\Roaming\npm\node\u modules\pr
otractor\node\u modules\jasmine\node\u modules\jasmine core\lib\jasmine core\jasmine
.js:1916:24)
在QueueRunner.run(C:\Users\PJ\AppData\Roaming\npm\node\u模块
\量角器\node\u modules\jasmine\node\u modules\jasmine core\lib\jasmine core\jasm
(英译本:1871:9)
在QueueRunner.execute(C:\Users\PJ\AppData\Roaming\npm\node\u mod
ules\dragrator\node\u modules\jasmine\node\u modules\jasmine core\lib\jasmine core\
《茉莉花》js:1859:10)
位于Spec.Env.queueRunnerFactory(C:\Users\PJ\AppData\Roaming\npm\
节点\模块\量角器\节点\模块\茉莉花\节点\模块\茉莉花核心\库\茉莉花
ne core\jasmine.js:697:35)
在Spec.execute(C:\Users\PJ\AppData\Roaming\npm\node\u modules\pr
otractor\node\u modules\jasmine\node\u modules\jasmine core\lib\jasmine core\jasmine
.js:359:10)
在Object.fn(C:\Users\PJ\AppData\Roaming\npm\node\u modules\protr
actor\node\u modules\jasmine\node\u modules\jasmine core\lib\jasmine core\jasmine.js
:2479:37)
在attemptAsync(C:\Users\PJ\AppData\Roaming\npm\node\u modules\pr
otractor\node\u modules\jasmine\node\u modules\jasmine core\lib\jasmine core\jasmine
.js:1916:24)
在QueueRunner.run(C:\Users\PJ\AppData\Roaming\npm\node\u模块
\量角器\node\u modules\jasmine\node\u modules\jasmine core\lib\jasmine core\jasm
(英译本:1871:9)
在QueueRunner.execute(C:\Users\PJ\AppData\Roaming\npm\node\u mod
ules\dragrator\node\u modules\jasmine\node\u modules\jasmine core\lib\jasmine core\
《茉莉花》js:1859:10)
从异步测试:
错误
在套房。(D:\dragor\u git\Demo\\LoginTest。
js:3:2)
在addSpecsToSuite(C:\Users\PJ\AppData\Roaming\npm\node\U模块
\量角器\node\u modules\jasmine\node\u modules\jasmine core\lib\jasmine core\jasm
(见附件js:833:25)
在Env.descripe(C:\Users\PJ\AppData\Roaming\npm\node\u modules\pr
otractor\node\u modules\jasmine\node\u modules\jasmine core\lib\jasmine core\jasmine
.js:802:7)
在jasmineInterface.description(C:\Users\PJ\AppData\Roaming\npm\no
de_modules\dragrator\node_modules\jasmine\node_modules\jasmine core\lib\jasmine
-core\jasmine.js:3375:18)
反对。(D:\dragor\u git\Demo\\LoginTest
.js:2:1)
您应该被定义为一个函数:

var Page = function () {
    this.login = element(by.model('credentials.username'));
    this.password = element(by.model('credentials.password'));
    this.user = "Email";
    this.passwd = "Password";
    this.goButton = $('input.btn.btn-primary');

    this.EC = protractor.ExpectedConditions;

    this.go = function() {
        browser.get("Application URL", 30000);
        browser.wait(this.EC.elementToBeClickable(this.login), 30000);
    };
};

module.exports = new Page();

谢谢你的建议,我同意它应该按照你提到的方式工作,但是,奇怪的是,我们仍然陷入了未识别类型的问题

我们对节点js和这个堆栈有点陌生。我尝试了多种选择,包括您提到的一种,将所有内容包装到一个函数中,将元素/函数单独公开为模块导出等

最后,我发现下面的一个对我有用,使用原型

var AngularPage = function () {

  };
AngularPage.prototype.login     = element(by.model('credentials.username'));
AngularPage.prototype.password  = element(by.model('credentials.password'));
AngularPage.prototype.goButton  = $('input.btn.btn-primary');

AngularPage.prototype.user      = "username";
AngularPage.prototype.passwd    = "password";
AngularPage.prototype.EC        = protractor.ExpectedConditions;

AngularPage.prototype.go        = function(){
    browser.get("Application URL",30000)
                                    .then(browser.wait(this.EC.elementToBeClickable(this.login),30000));
                                    expect(browser.getTitle()).toContain(‘String’);
     };
AngularPage.prototype.loginMethod = function(){
    console.log("Login started");
     this.login.sendKeys(this.user);
this.password.sendKeys(this.passwd);
this.goButton.click(); 
    browser.wait(this.EC.elementToBeClickable(this.compute));
    };
module.exports = AngularPage;
在测试文件中,我就是这样导入并调用了一个示例代码段的

var page = require('./LoginPage_Export_As_Prototype.js');
var LoginPage = new page();
LoginPage.go();
LoginPage.loginMethod();
谢谢, 普拉卡什