gpt4 book ai didi

javascript - 如何构建 Protractor promise

转载 作者:行者123 更新时间:2023-11-29 10:39:20 24 4
gpt4 key购买 nike

在这个例子中,我正在测试一个元素是否位于页面底部。我在 Protractor/Webdriver 中使用了 promises,但我认为我用错了,因为我认为它不应该看起来这么乱。

describe('Element', function(){
it('should be placed at bottom', function(){
element(by.id('page').getSize().then(function(dimP){
element(by.id('element').getLocation().then(function(locE){
element(by.id('element').getSize().then(function(dimE){
expect(locE.y + dimE.height).toEqual(dimP.height);
})
});
});
})
});

我怎样才能以更简洁的方式做到这一点?我使用的是 Protractor 2.1.0 版。

我试过这样做:

expect(element(by.id('page').getSize().height).toEqual(1000);

但它说Expected undefined to equal 1000. 所以我似乎不能使用这里解释的返回值:https://github.com/angular/protractor/blob/master/docs/control-flow.md

(我在实际测试中使用的是一个页面对象,所以变量并没有例子中那么难看。)

最佳答案

因为 getSize()getLocation() 都返回 promises 而你需要实际值,你必须 resolve 所有的 promises,显式地使用 then (),或者让 expect() 隐式地为你做这件事。

我实际上将您的问题理解为“如何在 Protractor 中展平 promise 链?”。这就是 promise.all() 将有助于一次解决多个 promise ,这将使您免于编写多个嵌套的 then() 回调:

var elm = element(by.id('element')),
page = element(by.id('page'));

var promises = [elm.getSize(), elm.getLocation(), page.getSize()];

protractor.promise.all(promises).then(function (values) {
expect(values[0].height + values[1].y).toEqual(values[2].height);
});

另见:

关于javascript - 如何构建 Protractor promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31808740/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com