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应用程序,即使页面已加载
- 停止手动引导应用程序
- 使用
overbrowser.get
browser.driver.get
量角器
实际上找到了根元素(您也可以在配置中显式设置根元素:“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嗯,他们是这样发送的。我们需要至少向他们证明这不是这个特定应用程序的问题,量角器与角度应用程序同步的方式有问题,这样才能引起量角器开发人员的注意。我建议开始悬赏以吸引注意并获得更多帮助——但是,既然你已经这样做了……我们可以再试一次。谢谢我一定会仔细看看——这个问题仍然在我的待办事项清单上。