6

我正在开发一个使用 Knockout 的网页。在看到这篇关于在非 Angular 页面上使用 Protractor 的帖子后,我设置了 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 测试框架提出建议。

4

1 回答 1

9

protractor基本上是一个包装器WedDriverJS(javascript selenium bindings)。protractor使测试 AngularJS 页面更容易和更自然,知道何时确定 Angular 并且页面准备好与之交互并引入几个特定于 Angular 的定位器。

换句话说,您绝对可以knockout使用protractor. 在这种情况下,您需要使用Expected Condition显式等待元素出现:ko-componentpresenceOf

var EC = protractor.ExpectedConditions;
var e = element(by.id('ko-component'));
browser.wait(EC.presenceOf(e), 10000);

expect(e.getText()).toEqual('Hello World!');
于 2015-05-05T22:37:22.953 回答