我正在使用Knockout的网页。我在看到this post about using Protractor on non-Angular pages之后设置了Protractor,但似乎Protractor不能“看到”任何属于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,那么欢迎提出其他e2e测试框架的建议。
答案 0 :(得分:9)
protractor
基本上是WedDriverJS
(javascript selenium bindings)的包装器。 protractor
使AngularJS页面的测试更容易,更自然,知道何时角度已经确定并且页面已准备好与之交互并引入几个特定于角度的定位器。
换句话说,您绝对可以使用knockout
测试protractor
个网页。在这种情况下,您需要explicitly wait,直到ko-component
元素出现,方法是presenceOf
Expected Condition:
var EC = protractor.ExpectedConditions;
var e = element(by.id('ko-component'));
browser.wait(EC.presenceOf(e), 10000);
expect(e.getText()).toEqual('Hello World!');