Değer

2016-07-22 69 views
5

dizisinde yeni rasgele değer üretin Sayfadaki rastgele bir bağlantıyı tıklatmak için iletici kullandığım bir durum var. (Çok fazla var). Tıklamak istemediğim bir dizi bağlantım var, bu yüzden rasgele bağlantımın bu dizide ne zaman olduğunu öğrenmek ve yeni bir rasgele bağlantı oluşturmak istiyorum.Değer

İşte randomLink metin noClickArray ise bulmak için lodash kullanıyorum

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

sayfada rastgele bağlantıyı tıklamanız benim çalışma kod ama ben gelene kadar rastgele değerler oluşturarak tutmak nasıl bilmiyorum Değer dizide mevcut değil. Bunu nasıl yapabilirim?

+1

o seçilebilir linklere ayrı seçici olması daha iyi olmaz: Bu şekilde, tüm bağlantılar için metin alma maliyetini önlemek olacak? Örneğin. '.clickableLinks', bu şekilde geçerli olup olmadığını kontrol etmek için tüm listeyi yinelemeniz veya filtrelemeniz gerekmez. – DBS

+0

Veya bağlantının anahtar olduğu bir nesne kullanın, böylece bağlantı/anahtarın nesne içinde olup olmadığını görebilirsiniz. – IMTheNachoMan

cevap

5

Sanırım sorunu aşırı derecede karmaşık hale getiriyorsunuz. Sadece Eğer filter() önceden kullanarak tıklayın istemiyorum bağlantıları filtrelemek olacaktır: olmayan bir siyah listelenen bağlantıyı elde edene kadar

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

Genellikle işleri daha karmaşık hale getirmeye eğilimliyim :) gerçekten temiz bir çözüm gibi görünüyor. Teşekkürler! – cocoa

3

Sadece yinelemeli çağrı kullanabilirsiniz.

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

    }); 
}