如何从数组(量角器)中获取一个值?

时间:2016-02-10 09:41:40

标签: selenium automated-tests protractor

是否可以从数组中获取一个值,例如:

Array
(
    [id] = 100917
    [sid] = SM0ddb860df74148f19f57b314bfc80b39
    [date_created] = 2016-02-10 12:04:08
    [date_updated] = 2016-02-10 12:04:08
    [date_sent] = 
    [to] = +996559138088
    [from] = +15674434357
    [body] = Confirmation code: 75ba76
    [status] = queued
    [direction] = outbound-api
    [price] = 
    [price_unit] = USD
)

我需要以某种方式使用以下方法获取值“75ba76”(在确认代码字符串中):

[to] = +996559138088

当我尝试选择它时,我看到:

http://prntscr.com/a1cngn

任何想法?.. 感谢。

2 个答案:

答案 0 :(得分:1)

您可以使用字符串和数组操作来获取所需的值,因为默认情况下html元素中的文本存储为字符串。 filter()函数可用于获取具有您在下面<pre>变量中指定的数字的arrString元素。这是怎样的 -

var arrString = "[to] = +996559138088";
var reqValue;
element.all(by.css('pre')).filter(function(ele){
    return ele.getText().then(function(str){
        return str.search(arrString) > -1;
    });
}).getText().then(function(val){ //returns array as a string
    reqValue = val.split('\n').filter(function(eachEle){return eachEle.search(/body/i)>-1}).toString().split(' ').pop();
    //reqValue holds the data that you require
});

虽然代码看起来有点奇怪,但它应该可以胜任。希望它有所帮助。

答案 1 :(得分:0)

通过强大的头脑风暴,我使用下一个代码解决了问题。它可能看起来很大,但效果很好!

    it("get temp password", function () {        
    browser.get("http://api.test.yalla.ng/sms.php?db=stena_kg");

    var preElement = element.all(by.css('pre'));
    var matchPhone =  browser.params.phones.matchPhone;
    var matchPass;

    var elementIndex = 0;
    parseNextElement();

    function parseNextElement() {
        preElement.get(elementIndex).getText().then(function (text) {
            parseElementData(text);
            if(!matchPass){
                elementIndex++;
                parseNextElement();
            }else{
                onMatch();
            }
        });
    }

    function parseElementData(data){
        var dataArr = data.split("\n");
        var phoneTxt = "";
        var passTxt = "";

        for(var i = 0; i<dataArr.length; i++){
            var str = dataArr[i];
            var splitStr = str.split(" ");
            if(str.match(/\[to\]/)){
                phoneTxt = splitStr[splitStr.length - 1];
            }
            if(str.match(/\[body\]/)){
                passTxt = splitStr[splitStr.length - 1];
            }
        }

        console.log(phoneTxt, passTxt);

        if(phoneTxt == matchPhone){
            matchPass = passTxt;
        }
    }

    function onMatch(){
        console.log("COMPLETE!!!", matchPass);
    }

}, 600000);

});