量角器 - 无法读取属性&$$;可测试性'未定义的

时间:2017-05-10 01:32:42

标签: protractor

我收到的错误是:

"Error while waiting for Protractor to synce with the page: "Cannot read property '$$testability' of undefined"

以下是我的测试。

describe('On the MyMoments page', function(){  

    beforeEach(function() {
        var editLocationText = 'Location';

        browser.driver.get('http://192.168.0.6:8100/#/page1/myMoments');
    });

    it('The edit button should work', function() {
        browser.driver.get('http://192.168.0.6:8100/#/page1/myMoments').then(function() {
            // browser.waitForAngular();
            browser.getCurrentUrl().then(function(url) {

            });
        });


    });
});

这是我的配置文件:

exports.config = {  
    capabilities: {
        'browserName': 'chrome',
        'chromeOptions': {                
            args: ['--disable-web-security']
        } 
    },
    baseUrl: 'http://192.168.0.6:8100',
    specs: [
    '*.test.js'
    ],
    jasmineNodeOpts: {
        isVerbose: true,
    }
};

我不认为这与我的测试有关,因为我的测试非常简单。以前有人遇到过这个问题吗?我有点卡住了。

感谢。

编辑:

将我的Protractor版本降级到4.0.14以修复此错误。现在我得到了:

"Failed: Error while waiting for Protractor to sync with the page: "[ng:test] no injector found for element argument to getTestability/http://errors.angularjs.org/1.5.3/ng/test"

如果有人知道这是什么或如何解决这个问题,请告诉我们!

感谢。

4 个答案:

答案 0 :(得分:1)

这是量角器中的一个已知问题,请参阅here。正如问题中所提到的,这是因为如果没有将值传递给它,则浏览器会返回app根目录的当前值,但当前返回undefined。 一个新的版本即将到来,应该解决这个问题。

希望有所帮助

答案 1 :(得分:0)

将浏览器从chrome更改为firefox对我有用。

// conf.js
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
  capabilities: {
  'browserName': 'firefox'
},
specs: ['login-spec.js']
}

答案 2 :(得分:0)

虽然它有时是由根目录中没有html标记的文档引起的,但是#34;无法读取属性&$$; $$可测试性'未定义"更有可能表现为另一个错误的症状,该错误导致页面无法加载,或与任何因任何原因未加载的页面进行任何交互。

尝试在抛出错误的行上方使用browser.sleep,以便为页面加载时间。

如果页面尚未准备好进行量角器,则用于等待特定条件的browser.ExpectedConditions子句可能会抛出此错误。

有时,无法避免硬编码睡眠。

要诊断并修复它,

  • 放置browser.enterRepl();进入行前的代码 这似乎抛出了$$可测试性错误。
  • 如果仍然抛出$$可测试性错误,则移动browser.enterRepl();几行
  • 每次在没有$$可测试性错误的情况下触发enterRepl(),然后移动browser.enterRepl();一行
  • 最后,当enterRepl移动到导致错误的行正下方的行时,您现在可能会看到一条更有意义的错误消息。
  • 放置一个browser.sleep()或其他代码,以便在导致该错误的行之前修复您的特定问题。

答案 3 :(得分:0)

我在Angular混合应用程序中遇到了同样的问题。 就我而言,问题在移除后已解决,

rootElement: 'myRootElement'

来自配置。