2016-07-22 14 views
5

मेरे पास ऐसी स्थिति है जहां मैं पृष्ठ पर एक यादृच्छिक लिंक क्लिक करने के लिए प्रोटैक्टर का उपयोग कर रहा हूं। (यह बहुत है)। मेरे पास लिंक की एक सरणी है जिसे मैं क्लिक नहीं करना चाहता, इसलिए मैं जानना चाहता हूं कि मेरा यादृच्छिक लिंक उस सरणी में कब होता है और एक नया यादृच्छिक लिंक उत्पन्न करता है।मान यादृच्छिक मान उत्पन्न करें यदि मान सरणी में है

यहाँ पेज

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

मैं lodash उपयोग कर रहा हूँ अगर randomLink पाठ noClickArray में है खोजने के लिए पर एक यादृच्छिक लिंक पर क्लिक करें करने के लिए अपने काम के कोड है, लेकिन मैं जब तक यादृच्छिक मान पैदा रखने के लिए पता नहीं कैसे मान सरणी में मौजूद नहीं है। मैं यह कैसे कर सकता हूँ?

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

    }); 
} 
संबंधित मुद्दे