2013-05-28 3 views
11

हाय मैं सेलेनियम का उपयोग कर रहा द्वारा की जगह कुछ गंभीर मुद्दों faceing का पता लगाएं,पेज और छवि में टूटी हुई छवियों webdriver 2.25.0 & एक और छवि

  1. कैसे सेलेनियम Webdriver
  2. का उपयोग कर एक पेज में टूटी हुई छवियों को खोजने के लिए छवि को कैसे ढूंढें वेबड्राइवर का उपयोग कर एक ही नाम वाले किसी अन्य छवि (यह भी बग है) द्वारा प्रतिस्थापित किया जाता है।

आपके मूल्य-सक्षम सुझावों के लिए अग्रिम धन्यवाद।

उत्तर

9

अगली पंक्तियों में अनुकूलित कर रहे हैं नहीं है, लेकिन वे टूटी हुई छवियों मिल सकता है:

List<WebElement> imagesList = _driver.findElements(By.tagName("img")); 
for (WebElement image : imagesList) 
{ 
    HttpResponse response = new DefaultHttpClient().execute(new HttpGet(image.getAttribute("src");)); 
    if (response.getStatusLine().getStatusCode() != 200) 
     // Do whatever you want with broken images 
} 
अपने दूसरे मुद्दे के बारे में

, मुझे लगता है कि मैं इसे सही ढंग से समझ में नहीं आया। क्या आप इसे अधिक विस्तार से समझा सकते हैं?

+0

हाय जॉनबो, एक छवि का नाम "MyImage.jpg" है, पहली बार मैं अपनी टेस्ट स्क्रिप्ट MyImage निष्पादित कर रहा हूं। साइट पर कुछ समय डेवलपर परिवर्तन के बाद ठीक है और यह "MyImage" को अन्य छवियों द्वारा प्रतिस्थापित किया गया है जिसका नाम "MyImage" (छवियों फ़ोल्डर पर) है। अब, हम टेस्ट स्क्रिप्ट MyImage को निष्पादित करते हैं और हमारी टेस्ट स्क्रिप्ट पास निष्पादित करते हैं। लेकिन वास्तव में यह बग है क्योंकि यूआई में एक और छवि प्रदर्शित हो जाती है। आपके त्वरित उत्तर के लिए धन्यवाद। – Chetan

+2

जैसा कि मैंने इसे देखा है, आपको छवि को पहले निष्पादन में संग्रहीत करने की आवश्यकता है ताकि आप अगली बार इसकी तुलना कर सकें, क्योंकि HTML बिंदु से पृष्ठ बिल्कुल वही हो सकता है और सेलेनियम छवियों के अंतर को नहीं ढूंढ पाएगा । या हो सकता है कि आप सेलेनियम का उपयोग सिकुली स्क्रिप्ट जैसे एक छवि पहचान उपकरण के साथ संयोजन में कर सकें। – Johnbo

+0

मैं सहमत हूं लेकिन वेब पेज की सभी छवियां स्टोर हैं और फिर तुलना करें, प्रदर्शन के अनुसार यह अच्छा नहीं है। हम छवि आकार के साथ खेल सकते हैं (यानी हम छवि आकार स्टोर कर सकते हैं और अगली बार छवि आकार की तुलना कर सकते हैं)। कोई विचार कृपया सुझाव दें। – Chetan

14

स्वीकृत उत्तर की आवश्यकता है कि आप प्रत्येक छवि को एक अतिरिक्त कॉल के साथ प्रॉक्सी का उपयोग करें ताकि यह निर्धारित किया जा सके कि छवियां टूट गई हैं या नहीं।

सौभाग्य से, एक और तरीका है कि आप केवल जावास्क्रिप्ट का उपयोग कर ऐसा कर सकते हैं (मैं रूबी का उपयोग कर रहा है, लेकिन आप WebDriver बाइंडिंग भर में किसी भी executeScript विधि में एक ही कोड का उपयोग कर सकते हैं):

images = @driver.find_elements(:tag_name => "img") 
broken_images = images.reject do |image| 
    @driver.execute_script("return arguments[0].complete && typeof arguments[0].naturalWidth != \"undefined\" && arguments[0].naturalWidth > 0", image) 
end 
# broken_images now has an array of any images on the page with broken links 
# and we want to ensure that it doesn't have any items 
assert broken_images.empty? 

आपके अन्य प्रश्न के लिए, मैं केवल पृष्ठ का एक स्क्रीनशॉट लेने की सिफारिश करता हूं और मानव को मैन्युअल रूप से सत्यापित करने के लिए परिणामस्वरूप स्क्रीनशॉट में सही छवियां होती हैं। कंप्यूटर स्वचालन कार्य कर सकते हैं, लेकिन मनुष्यों को समय-समय पर अपने परिणामों की जांच और सत्यापन करना पड़ता है :)

2

अन्य उत्तरों के आधार पर, अंततः एक कोणीय/प्रोटैक्टर/वेबड्रिवरज सेटिंग में मेरे लिए काम करने वाला कोड है:

it('should find all images', function() { 
    var allImgElts = element.all(by.tagName('img')); 

    browser.executeAsyncScript(function (callback) { 
     var imgs = document.getElementsByTagName('img'), 
      loaded = 0; 
     for (var i = 0; i < imgs.length; i++) { 
      if (imgs[i].naturalWidth > 0) { 
       loaded = loaded + 1; 
      }; 
     }; 
     callback(loaded); 
    }).then(function (loadedImagesCount) { 
     expect(loadedImagesCount).toBe(allImgElts.count()); 
    }); 
}); 

webdriver कोड img तत्वों की संख्या, और समारोह ब्राउज़र संदर्भ में निष्पादित मायने रखता है सफलतापूर्वक लोड तत्वों की संख्या गिना जाता है। ये संख्याएं समान होनी चाहिए।

+0

प्रोटैक्टर-भूमि में 'allImgElts' मूल रूप से ब्राउज़र-भूमि के अंदर' imgs' जैसा ही काम कर रहा है, है ना? (मुझे सच में विश्वास नहीं है कि वे हैं, इसलिए ज्यादातर मैं यह पूछ रहा हूं।) लेकिन, अगर वे थे ... लंबाई में एकमात्र अंतर होगा अगर कोई 'img [i] .naturalWidth <= 0', है ना?तो, यह 'allImgElts' को छोड़ने के लिए आसान और अधिक कुशल होगा, और ब्राउज़र-स्क्रिप्ट स्क्रिप्ट केवल अमान्य प्राकृतिक चौड़ाई वाली छवियों की संख्या वापस कर देगी, और प्रोटैक्टर भूमि की उम्मीद है कि 0 होना चाहिए? (आप फैंसी नेस्टेड 'फिर' पर याद करेंगे जो कि देखने के लिए एक साफ चाल है।) –

+0

हाँ, आप सही हैं। इसे टूटी हुई छवियों की संख्या को 'imgs.length - loaded' के रूप में वापस करके सरलीकृत किया जा सकता है, जिसे आप 0 होने की उम्मीद कर सकते हैं। फिर' allImgEtls' की आवश्यकता नहीं है। – avandeursen

संबंधित मुद्दे