我使用 CefSharp 运行 AngularJS 应用程序。CefSharp 有一个方法可以
我希望能够使用 Protractor 测试这个功能,但是我不知道如何在我的测试运行之前访问
从 Protractor 访问
但是当窗口实际加载时,我仍然看到“无法读取未定义的属性'bar'”。编辑2:甚至尝试了executeAsyncScript也没有成功。
RegisterJsObject
,在客户端脚本执行之前将对象或属性分配到 window
上。我希望能够使用 Protractor 测试这个功能,但是我不知道如何在我的测试运行之前访问
window
并分配对象。由于我的应用程序依赖于那些被注册到 window
上的对象,我需要一种方式来硬编码或模拟它。如果没有这些对象注册,我的应用程序将继续抛出 undefined
错误。从 Protractor 访问
window
是否可能?理想情况下,看起来像这样:describe('my test', function () {
beforeEach(function () {
window.foo = "bar";
});
it('should do stuff', function () {
browser.get('index.html');
// do stuff
});
});
编辑:我已经尝试过
describe('my test', function () {
it('should do stuff', function () {
browser.executeScript('return window.foo = { bar: {a: "b"}}').then(function () {
browser.get('#/');
browser.driver.manage().timeouts().implicitlyWait(10000);
});
});
但是当窗口实际加载时,我仍然看到“无法读取未定义的属性'bar'”。编辑2:甚至尝试了executeAsyncScript也没有成功。
describe('my test', function () {
it('should do stuff', function () {
browser.executeAsyncScript(function(cb) {
window.foo = { bar: { a: "b" } };
cb(true);
}).then(function (cb) {
browser.get('#/');
browser.driver.manage().timeouts().implicitlyWait(10000);
browser.wait(function () {
element(by.id('some-element')).isPresent();
});
expect(element(by.id('some-element')).isPresent()).toBe(true);
});
});
});
browser.driver.get()
和browser.executeScript
之间执行。有没有办法在这两者之间延迟Angular以确认窗口对象实际上已经注册?根据API文档,driver.get()
似乎没有browser.get()
具有的超时参数。 - Barry Tormey