繁体   English   中英

'.then'函数在angularjs的量角器E2E测试中如何工作?

[英]How exactly does '.then' function work in the Protractor E2E testing of an angularjs?

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

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())在这里到底如何工作?

.then表示该功能是一个promise

每个承诺均以未决状态开始,并且可以成功地用一个值解决,也可以拒绝以指定错误。

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

从字面上承诺,您承诺一个值或最终值。 .then调用此承诺进行解析,并返回解析后要使用的值。

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

量角器的期望值也可以自动解决所有(量角器)的promise函数。

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

在其他任何地方,您都需要手动解决该功能。 .isDisplayed()函数还有一种特殊情况,该函数仅在元素存在于DOM中时才起作用。 如果不是(例如ngIf).isDisplayed()引发错误,则应改用.isElementPresent()。

始终寻找您在量角器API网站( https://angular.github.io/protractor/#/api )中使用的方法的返回类型。 这就是isDisplayed返回!webdriver.promise.Promise。(boolean)如果它是一个带有大括号的类型的promise,则意味着一旦使用promise 解决了promise,它将返回一个提到的类型的值,然后函数将等待promise完成,您可以传递值(布尔值)作为在.then内部调用的参数。 请注意,不必总是使用.then,而仅当您需要对承诺的解决后所获得的值进行处理时,例如使用期望值进行声明或在控制台中或调试时进行打印。 希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM