量角器忽略同步问题

Protractor ignoreSynchronization issue

我正在为我的一个应用程序开发端到端测试套件。我们有一个非 angular 站点的 sso,我们的站点是 angular 站点。在测试开始时,我调用了 SSO 设置:

 browser.ignoreSynchronization = true;        
 browser.get(browser.baseUrl + '/agoda/home?mock=mock-jax);

我能够成功登录,它重定向到我的应用程序,这是一个 angular 站点。我设置 browser.ignoreSynchronization = false;一旦我重定向到我的应用程序并加载它。在此之后没有任何效果。

我尝试阅读以下内容:

var books= element.all(by.repeater('book in books'));
console.log(licenses.count());

结果变成

{ ptor_:
   { controlFlow: [Function],
     schedule: [Function],
     setFileDetector: [Function],
     getSession: [Function],
     getCapabilities: [Function],
     quit: [Function],
     actions: [Function],
     touchActions: [Function],
     executeScript: [Function],
     executeAsyncScript: [Function],
     call: [Function],
     wait: [Function],
     sleep: [Function],
     getWindowHandle: [Function],
     getAllWindowHandles: [Function],
     getPageSource: [Function],
     close: [Function],
     getCurrentUrl: [Function],
     getTitle: [Function],
     findElementInternal_: [Function],
     findDomElement_: [Function],
     findElementsInternal_: [Function],
     takeScreenshot: [Function],
..
}

我认为这与 ignoreSynchronization 有关,但不确定我做错了什么?

您没有看到 count() 函数 returns 在执行后作为回调的承诺。 Protractor 建立在 WebDriverJs 的异步承诺模型之上。它与您的 ignoreSynchronization 无关,您正在控制台记录一个量角器实例对象而不是它的值。您需要控制台记录通过承诺返回的值。方法如下 -

var books= element.all(by.repeater('book in books'));
books.count().then(function(booksCount){
    console.log(booksCount);
});

在上面的代码中使用 .then() 的上述方法应该可以解决您的问题。 More about promises。希望对你有帮助。