gpt4 book ai didi

javascript - 从 ElementFinder 数组创建 ElementArrayFinder

转载 作者:可可西里 更新时间:2023-11-01 02:23:39 28 4
gpt4 key购买 nike

这是 Take elements while a condition evaluates to true (extending ElementArrayFinder) 的后续问题特别是主题和@cvakiitho 的回答。

问题:

执行以下代码后:

var i = 0;
var el = element.all(by.css('ul li a'));
var tableItems = [];
(function loop() {
el.get(i).getText().then(function(text){
if(text){
tableItems.push(el.get(i));
i+=1;
loop();
}
});
}());

tableItems 将包含一组 ElementFinder 实例 - 或者,简单地说 - 一组网络元素。

问题:

是否可以将 ElementFinder 数组转换为 ElementArrayFinder实例?

动机:

我想要这个的原因是拥有所有方便的 ElementArrayFinder 功能实用程序,例如 map() , each() , reduce()并能够在其上调用 getText() 产生一个 promise ,该 promise 将解析为一个元素文本数组。

最佳答案

Constructor of ElementArrayFinder基本上需要两个主要参数: Protractor 实例和函数 getWebElements,它应该返回解析为 Web 元素数组的 promise 。只要每个 ElementFinder 都有一个名为 getWebElement 的方法来获取它的 Web 元素,就可以创建这样一个函数。

var arrayOfElementFinders = [el1, el2, el3];

var getWebElements = function () {

// create array of WebElements from array of ElementFinders
var webElements = arrayOfElementFinders.map(function (ef) {
return ef.getWebElement();
});

// immediately resolve and return promise
return protractor.promise.fulfilled(webElements);
};

现在当所有要求都满足后,就可以创建一个新的 ElementArrayFinder 实例了:

var elArrayFinder = new protractor.ElementArrayFinder(protractor, getWebElements);

为了使其易于使用,我会向 ElementArrayFinder 构造函数添加一个静态方法,并在测试开始之前将其包含在某处:

protractor.ElementArrayFinder.fromArray = function (arrayOfElementFinders) {
var getWebElements = function () {
var webElements = arrayOfElementFinders.map(function (ef) {
return ef.getWebElement();
})
return protractor.promise.fulfilled(webElements);
};
return new protractor.ElementArrayFinder(protractor, getWebElements);
};

并在如下测试中使用它:

var elArrayFinder = protractor.ElementArrayFinder.fromArray(arrayOfElementFinders);

关于javascript - 从 ElementFinder 数组创建 ElementArrayFinder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32599679/

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