gpt4 book ai didi

javascript - Protractor - 功能失效时返回未决 promise

转载 作者:行者123 更新时间:2023-11-29 21:45:58 25 4
gpt4 key购买 nike

我正在尝试创建一个函数,该函数将梳理一组元素并返回满足条件的元素的第一个实例。

这是我在测试中有效的内容:

element.all(by.css('_cssSelector_')).filter(function(elms, index) {
return elms.getAttribute('height').then(function(height) {
return parseInt(height) > 0;
});
}).then(function(validElms) {
browser.actions().mouseMove(validElms[0]).perform();
}

...但是如果我解决这个问题,它不起作用:

getValidElm = function() {
var validElm = element.all(by.css('_cssSelector_')).filter(function (elms, index) {
return elms.getAttribute('height').then(function (height) {
return parseInt(height) > 0;
});
}).then(function (validElms) {
return validElms[0];
});

return validElm;
}

如果我然后运行:

var validElmFromPage = getValidElm();
console.log(validElmFromPage);

我得到:Promise::2046 {[[PromiseStatus]]: "pending"}

这表明在使用函数外部的 var 之前函数内部的某些内容 Unresolved 问题。在(广泛地)阅读了这里的帖子,甚至这篇精彩的博客文章 ( http://spin.atomicobject.com/2014/12/17/asynchronous-testing-protractor-angular/ ) 之后,我仍然无法弄清楚这是怎么回事。我知道这很简单,很可能与 controlFlow 相关?

感谢您的帮助。

最佳答案

让函数返回一个 promise 。自 filter()返回一个 ElementArrayFinder,您应该能够使用 first():

getValidElm = function() {
return element.all(by.css('_cssSelector_')).filter(function (elms, index) {
return elms.getAttribute('height').then(function (height) {
return parseInt(height) > 0;
});
}).first();
}

first() 将返回一个 ElementFinder,您可以将其传递给 mouseMove():

var elm = getValidElm();
browser.actions().mouseMove(elm).perform();

关于javascript - Protractor - 功能失效时返回未决 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31170108/

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