'.then'功能究竟如何在角度调节器的量角器E2E测试中起作用?

时间:2015-08-26 09:04:29

标签: javascript angularjs protractor

我正在验证网页中是否显示元素。

element(by.css('<css>')).isDisplayed()

如果显示它应该返回'true'。但是对于下面的代码

getElement = element(by.css('<css>'))
console.log(getElement.isDisplayed())

在控制台输出中打印整个元素。如下所示

{ 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],

 .....................................................................

但是,当与.then函数一起使用时,其正常工作正常...

getElement.isDisplayed().then(function(isVisible){
    if(isVisible){
        <code to run if element is visible>
    }
}

如果元素可见,它的工作正常。

那么,.then(function())究竟是如何工作的?

1 个答案:

答案 0 :(得分:2)

.then表示该函数是promise

  

每个承诺都以挂起状态启动,可以使用值成功解析,也可以拒绝指定错误。

当事情以异步方式发生时使用Promise,例如当您不知道在页面上找到某个元素或从服务器获取数据需要多长时间时(例如$ http。获得)。但是您需要此元素或以下代码的数据才能工作。

从字面上承诺,你保证价值或最终价值。 .then调用此promise将被解析并返回解析后要使用的值。

在Protractor中,带有promise函数的简单函数调用总是返回Protractor驱动程序(对象),这是您在日志输出中看到的。除了较新的Protractor版本(2.0 ++)中的ElementFinder函数之外,几乎所有公共Protractor函数都是promise。

此外,Protractor的期望可以自动解决所有(量角器)承诺函数。

expect(element(by.css('<css>')).isDisplayed()).toBe(true);

您需要手动解决该功能的其他任何地方。 .isDisplayed()函数还有一个特例,该函数仅在元素存在于DOM中时才有效。如果不是(例如ngIf).isDisplayed()会抛出错误,您可以使用.isElementPresent()代替。