能否使用 Protractor 测试 Knockout 应用程序?
Can a Knockout app be tested with Protractor?
我正在制作一个使用 Knockout 的网页。我在看到 this post about using Protractor on non-Angular pages 后设置了 Protractor,但似乎 Protractor 不能 'see' 属于 KO 组件的任何元素。
describe('a simple test', function () {
it('works', function () {
browser.ignoreSynchronization = true;
browser.get('profile');
expect(browser.getTitle()).toEqual('Title'); // this passes (outside KO)
expect(element(by.id('ko-component')).getText()).toEqual('Hello World!'); // this fails (inside KO)
});
});
第二个断言导致此错误,即使该元素肯定在 HTML.
中
Message:
NoSuchElementError: No element found using locator: By.id("ko-component")
如果我不会Protractor,欢迎推荐其他端到端测试框架
protractor
基本上是 WedDriverJS
的包装器(javascript selenium 绑定)。 protractor
使 AngularJS 页面的测试更容易、更自然,知道何时 angular 已解决并且页面已准备好与之交互,并引入了几个 angular 特定的定位器。
换句话说,您绝对可以用 protractor
测试 knockout
个页面。在这种情况下,您需要 explicitly wait until the ko-component
element is present by using presenceOf
:
var EC = protractor.ExpectedConditions;
var e = element(by.id('ko-component'));
browser.wait(EC.presenceOf(e), 10000);
expect(e.getText()).toEqual('Hello World!');
我正在制作一个使用 Knockout 的网页。我在看到 this post about using Protractor on non-Angular pages 后设置了 Protractor,但似乎 Protractor 不能 'see' 属于 KO 组件的任何元素。
describe('a simple test', function () {
it('works', function () {
browser.ignoreSynchronization = true;
browser.get('profile');
expect(browser.getTitle()).toEqual('Title'); // this passes (outside KO)
expect(element(by.id('ko-component')).getText()).toEqual('Hello World!'); // this fails (inside KO)
});
});
第二个断言导致此错误,即使该元素肯定在 HTML.
中Message:
NoSuchElementError: No element found using locator: By.id("ko-component")
如果我不会Protractor,欢迎推荐其他端到端测试框架
protractor
基本上是 WedDriverJS
的包装器(javascript selenium 绑定)。 protractor
使 AngularJS 页面的测试更容易、更自然,知道何时 angular 已解决并且页面已准备好与之交互,并引入了几个 angular 特定的定位器。
换句话说,您绝对可以用 protractor
测试 knockout
个页面。在这种情况下,您需要 explicitly wait until the ko-component
element is present by using presenceOf
var EC = protractor.ExpectedConditions;
var e = element(by.id('ko-component'));
browser.wait(EC.presenceOf(e), 10000);
expect(e.getText()).toEqual('Hello World!');