2016-07-22 13 views
5

私は、分度器を使ってページのランダムリンクをクリックしている状況があります。 (たくさんあります)。クリックしたくないリンクがあるので、ランダムリンクがいつその配列にあるかを知り、新しいランダムリンクを生成する必要があります。値が配列の場合は新しい乱数を生成

は、ここで私はrandomLinkテキストはnoClickArrayである場合に見つけることlodashを使用してい

var noClickArray = ['link2', 'link3']; // array much bigger than this 
var parent = this; 

function() { 
    var links = element.all(by.css('.links')); 
    return links.count().then(function(count) { 
    var randomLink = links.get(Math.floor(Math.random() * count)); 
    randomLink.getText().then(function(text) { 
     parent.selectedLink = text; // used in a different function 
     var containsLink = _.includes(noClickArray, text); 
    }); 
    return randomLink.click(); 
    }); 
} 

ページにランダムなリンクをクリックして自分の作業コードだが、私はまでのランダムな値を生成維持する方法がわかりません値は配列に存在しません。これどうやってするの?

+1

は、選択可能リンク上の別のセレクタを持っている方が良いと思いませんか?例えば'.clickableLinks'を実行すると、リスト全体を反復処理したりフィルタリングしたりする必要がなくなります。 – DBS

+0

リンクがキーであるオブジェクトを使用すると、リンク/キーがオブジェクト内にあるかどうかだけを確認できます。 – IMTheNachoMan

答えて

5

あなたは問題を複雑にしていると思います。 私はちょうどあなたがfilter()事前を使用してクリックしたくないリンクを除外します:

function() { 
    var links = element.all(by.css('.links')); 
    links = links.filter(function (link) { 
     return link.getText().then(function(text) { 
      return !_.includes(noClickArray, text); 
     }); 
    }); 

    return links.count().then(function(count) { 
    var randomLink = links.get(Math.floor(Math.random() * count)); 
    return randomLink.click(); 
    }); 
} 
+0

私は通常、物事をより複雑にする傾向があります:)本当にクリーンなソリューションのように見えます。ありがとう! – cocoa

3

あなたは非黒色の記載されたリンクを取得するまで、あなたは単に再帰呼び出しを使用することができます。 この方法で、あなたはすべてのリンクのテキストを得るためのコストを回避します:

function() { 
    return element.all(by.css('.links')).then(function clickRandom(links) { 

    // remove a random link from the array of links 
    var link = links.splice(Math.floor(Math.random() * links.length), 1)[0]; 

    return link && link.getText().then(function(text) { 
     if(noClickArray.indexOf(text) === -1) { // if not black listed 
     return link.click(); // click link 
     } 
     return clickRandom(links); // try again 
    }); 

    }); 
} 
関連する問題