Javascript ng:测试未找到可获取性的元素参数的注入器

Javascript ng:测试未找到可获取性的元素参数的注入器,javascript,angularjs,protractor,Javascript,Angularjs,Protractor,同样的问题还有其他问题,但解决方案对我不起作用。 这是我的规格 describe('Protractor Demo App', function() { it('should have a title', function() { browser.driver.get('http://rent-front-static.s3-website-us-east-1.amazonaws.com/'); expect(browser.getTitle()).toEqual('How

同样的问题还有其他问题,但解决方案对我不起作用。 这是我的规格

describe('Protractor Demo App', function() {
  it('should have a title', function() {
    browser.driver.get('http://rent-front-static.s3-website-us-east-1.amazonaws.com/');

    expect(browser.getTitle()).toEqual('How It Works');
  });
});
这里是我的conf.js

exports.config = {
  framework: 'jasmine',
  rootElement: 'body',
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['spec.js']
}
所以当我试着运行我的测试时,我得到了错误

  Message:
    Failed: Error while waiting for Protractor to sync with the page: "[ng:test] no injector found for element argument to getTestability\nhttp://errors.angularjs.org/1.5.0/ng/test"
  Stack:
    Error: Failed: Error while waiting for Protractor to sync with the page: "[ng:test] no injector found for element argument to getTestability\nhttp://errors.angularjs.org/1.5.0/ng/test"
        at C:\Users\ShapeR\PycharmProjects\ratest\node_modules\jasminewd2\index.js:101:16
        at Promise.invokeCallback_ (C:\Users\ShapeR\PycharmProjects\ratest\node_modules\selenium-webdriver\lib\promise.js:1329:14)
        at TaskQueue.execute_ (C:\Users\ShapeR\PycharmProjects\ratest\node_modules\selenium-webdriver\lib\promise.js:2790:14)
        at TaskQueue.executeNext_ (C:\Users\ShapeR\PycharmProjects\ratest\node_modules\selenium-webdriver\lib\promise.js:2773:21)

1 spec, 1 failure
我有一个body元素的手动引导,并在config中将rootElement设置为body,但它没有帮助。我甚至尝试删除手动boostraping,只是将ng app='rentapplicationApp'添加到body元素中,但它并没有改变什么,仍然是相同的错误


有什么不对吗?

量角器的核心价值在于它为您管理角度加载,包括同步,因此您不想使用:
browser.ignoreSynchronization=true

您收到的错误消息是量角器无法定位角度以进行同步。这是因为两个问题的结合:

  • 页面未准备好,未加载
  • 它无法定位ng应用程序,即使页面已加载
首先,从

如果您的页面不可用,手动引导量角器将无法使用browser.get加载您的页面。相反,请使用基本webdriver实例-browser.driver.get。这意味着量角器不知道页面何时已完全加载,您可能需要添加等待语句以确保测试避免竞争条件

解决方案1

添加一条语句

解决方案2

如果您没有手动引导的充分理由,或者不想等待:

  • 停止手动引导应用程序
  • 使用
    browser.get
    over
    browser.driver.get
[ng:测试]找不到可获取性的元素参数的注入器

我怀疑应用程序本身有问题,因为
量角器
实际上找到了根元素(您也可以在配置中显式设置
根元素:“body.root”
),但无法找到根元素

我会尝试一步一步地弄清楚到底发生了什么-首先,尝试对直接从源代码启动的非构建应用程序运行量角器测试,以确保这不是web包或构建错误的其他部分

然后,我会尝试升级到最新的1.x角度和量角器(3.3.0是最新版本)


目前最简单的解决方法是使用
browser.ignoreSynchronization=true
,关闭量角器和角度传感器之间的同步:

describe("Strange Protractor/Angular problem", function () {
    beforeEach(function () {
        browser.ignoreSynchronization = true;
        browser.get("https://dl.dropboxusercontent.com/u/597502/vxcv/index.html");

        var elm = $(".navbar-brand");
        browser.wait(EC.presenceOf(elm), 5000);
    });

    it("should have an expected title", function () {
        expect($(".navbar-brand").getText()).toEqual('RENT APPLICATION');
    });
});

当然,这种方法也有缺点-您必须使用
浏览器。在这里和那里等待
调用以解决时间问题。测试流程不会像启用同步时那样自然和简单

问题在于引导我的应用程序。由于某些原因,它不适用于ng应用程序标记。唯一有效的解决方案是手动引导它

angular.bootstrap(document, ["rentapplicationApp"]);

第一个参数应该是dom节点,而不是字符串,就像在我的例子中一样,虽然使用字符串应用程序可以工作,但getestability将失败。

我认为“手动引导”应用程序仍然很难与量角器同步。您可以用
browser.ignoreSynchronization=true
关闭同步吗?另外,无论您在哪里使用
$interval
,请尝试将
$timeout
替换为
$interval
。然后,使用
body
上定义的
ng app
定期引导应用程序。还是同一个问题吗?@alecxe Yep,正如我所说的,用ng应用程序取代手动引导没有任何改变。将$timeout替换为$interval也不会改变任何内容。ignoreSynchronization=true使这个简单的测试能够工作,但我并不认为这是一个解决方案,因为从我在其中读到的内容来看,它用于没有角度的页面,所以我猜其他量角器功能也不能与它一起工作..明白了。请您将具有
ng app
的版本部署到aws,以便我可以使用它吗?谢谢。@alecxe您只需保存页面并在html中更改它,它只是一个静态资产、html和2个js文件。(虽然它需要使用任何服务器提供服务,例如使用localhost访问,而不是作为html文件)。如果您仍然想要部署的版本,请告诉我,我会将其部署到其他url。谢谢您的回答。解决方案2不起作用。我同时尝试了driver.get和browser.get-什么也没变。我在没有手动引导的情况下尝试了它,同样的错误。解决方案1也不起作用。我甚至尝试添加browser.sleep 10秒,以确保加载应用程序。还是一样的错误。请参阅此片段。我不能运行非内置,因为我的应用程序需要网页包,否则它不在工作条件下,而且我使用最新的角度1.5.5和量角器3.3.0。没有帮助。但是我的应用程序运行良好,没有js错误,可以正常运行。只有量角器不能测试它。这不是一个错误吗?至于禁用同步-我完全失去了使用量角器的意义。@Aldarund是的,我知道禁用同步并不是最理想的解决方法。到目前为止,我已经尝试了多种方法,但都没有通过同步解决。这是一种奇怪的情况,我以前在使用量角器测试其他应用程序时从未遇到过。顺便说一句,我在控制台上看到js错误。@Alexe ye因为cors出现了错误,它们不是在正常情况下发生的,但仍然是相同的错误。我在Digrator repo中打开了一张罚单,但它只是在没有任何调查的情况下关闭了,因为它的“stackoverflow支持请求”…@Aldarund嗯,他们是这样发送的。我们需要至少向他们证明这不是这个特定应用程序的问题,量角器与角度应用程序同步的方式有问题,这样才能引起量角器开发人员的注意。我建议开始悬赏以吸引注意并获得更多帮助——但是,既然你已经这样做了……我们可以再试一次。谢谢我一定会仔细看看——这个问题仍然在我的待办事项清单上。