从ElementFinder数组中创建ElementArrayFinder [英] Making ElementArrayFinder from an array of ElementFinders

查看:97
本文介绍了从ElementFinder数组中创建ElementArrayFinder的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是采取的后续问题元素的条件评估为true(扩展ElementArrayFinder)主题,特别是@ cvakiitho的答案。

This is a follow-up question to Take elements while a condition evaluates to true (extending ElementArrayFinder) topic and @cvakiitho's answer in particular.

问题:

执行以下代码后:

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 将包含<$的数组c $ c> ElementFinder 实例 - 或者,简单来说 - 一个Web元素数组。

tableItems would contain an array of ElementFinder instances - or, to put it simple - an array of web elements.

问题:

是否可以转换<$的数组? c $ c> ElementFinder s到 ElementArrayFinder 实例?

Is it possible to convert an array of ElementFinders to an ElementArrayFinder instance?

动机:

我想要的原因是拥有所有方便的 ElementArrayFinder 功能实用程序,例如 map() each() reduce() 并且能够在其上调用 getText()将解析成元素文本数组的承诺。

The reason I want this is to have all of the convenient ElementArrayFinder functional utilities, like map(), each(), reduce() and to be able to call getText() on it producing a promise which would resolve into an array of element texts.

推荐答案

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

Constructor of ElementArrayFinder basically requires two main arguments: protractor instance and a function getWebElements, which should return a promise resolving to an array of Web Elements. As soon as every ElementFinder has a method to get it's Web Element called getWebElement, it is possible to create such a function.

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 :

Now when all requirements are satisfied, it is possible to create a new instance of ElementArrayFinder:

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

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

To make it easy to use I would add a static method to ElementArrayFinder constructor and include it somewhere before tests start:

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);
};

并在以下测试中使用它:

And use it in tests like:

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

这篇关于从ElementFinder数组中创建ElementArrayFinder的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆