5

मैं nesetests के साथ सेलेनियम वेबड्राइवर परीक्षण चला रहा हूँ। जब भी नोसेटेट विफल हो जाए तो मैं एक स्क्रीनशॉट कैप्चर करना चाहता हूं। वेबड्राइवर, पायथन या नोसेटेट सुविधाओं का उपयोग करके, मैं इसे सबसे प्रभावी तरीके से कैसे कर सकता हूं?यदि मेरे नोसेटेट विफल हो जाते हैं तो मैं स्क्रीनशॉट कैप्चर कैसे करूं?

+1

इसी कहेंगे, लेकिन unittest के लिए: [कैसे केवल पर कोड निष्पादित करने के लिए पाइथन unittest2 के साथ परीक्षण विफलताओं?] (http://stackoverflow.com/q/12290336/55075) SO – kenorb

उत्तर

0

अजगर में आप नीचे दिए गए कोड का उपयोग कर सकते हैं:

driver.save_screenshot('/file/screenshot.png') 
4

सबसे पहले, webdriver आदेश दिया गया है:

driver.get_screenshot_as_file(screenshot_file_path) 

मैं नाक में एक विशेषज्ञ नहीं हूँ (वास्तव में यह पहली बार है मैंने इसमें देखा है), हालांकि मैं py.test ढांचे का उपयोग करता हूं (जो समान है, हालांकि nose आईएमएचओ से बेहतर है)।

अधिकतर आपको नाक के लिए "plugin" बनाना होगा जहां आपको हुक addFailure(test, err) को लागू करना होगा जिसे "परीक्षण विफल होने पर बुलाया जाता है"।

इस addFailure(test, err) में आप Test object से परीक्षण का नाम प्राप्त कर सकते हैं और फ़ाइल के लिए पथ उत्पन्न कर सकते हैं।

उस कॉल के बाद driver.get_screenshot_as_file(screenshot_file_path)

py.test में मैं def pytest_runtest_makereport(item, call): हुक के कार्यान्वयन के साथ अपनी प्लगइन बना देता हूं। अंदर मैं call.excinfo का विश्लेषण करता हूं और यदि आवश्यक हो तो स्क्रीनशॉट बनाएं।

+0

पर मैंने कोशिश की है, लेकिन मुझे testFase में addFailure() में उदाहरण नहीं मिल सकता है। क्या आप साझा कर सकते हैं कि यह कैसे संभव है (केवल परीक्षण नाम जानने के द्वारा, जो मुझे केवल उचित वर्ग में इंगित करता है, उदाहरण के लिए नहीं) – vvondra

8

मेरे समाधान

import sys, unittest 
from datetime import datetime 

class TestCase(unittest.TestCase): 

    def setUp(self): 
     some_code 

    def test_case(self): 
     blah-blah-blah 

    def tearDown(self): 
     if sys.exc_info()[0]: # Returns the info of exception being handled 
      fail_url = self.driver.current_url 
      print fail_url 
      now = datetime.now().strftime('%Y-%m-%d_%H-%M-%S-%f') 
      self.driver.get_screenshot_as_file('/path/to/file/%s.png' % now) # my tests work in parallel, so I need uniqe file names 
      fail_screenshot_url = 'http://debugtool/screenshots/%s.png' % now 
      print fail_screenshot_url 
     self.driver.quit() 
+0

प्रश्न 'नाक' ढांचे के बारे में है, डिफ़ॉल्ट 'unittest' नहीं। –

+0

"वेबड्राइवर, पायथन या नोसेटेट्स सुविधाओं का उपयोग करके" –

+0

मुझे नहीं लगता कि "पायथन" का मतलब है "एक और ढांचे (जैसे unittest) का उपयोग करके" हालांकि, मैं गलत हो सकता हूं। –

0

शायद आप अलग तरह से अपने परीक्षण की स्थापना की है, लेकिन मेरे अनुभव में आप मैन्युअल रूप से कार्यक्षमता के इस प्रकार में निर्माण और विफलता के बिंदु पर यह दोहराना होगा। यदि आप सेलेनियम परीक्षण कर रहे हैं, संभावना है कि मेरे जैसे, आप find_element_by_ कुछ का उपयोग कर रहे हैं। मैं निम्नलिखित समारोह लिखा है मुझे बात के इस प्रकार से निपटने के लिए अनुमति देने के लिए:

def findelement(self, selector, name, keys='', click=False): 

    if keys: 
     try: 
      self.driver.find_element_by_css_selector(selector).send_keys(keys) 
     except NoSuchElementException: 
      self.fail("Tried to send %s into element %s but did not find the element." % (keys, name)) 
    elif click: 
     try: 
      self.driver.find_element_by_css_selector(selector).click() 
     except NoSuchElementException: 
      self.fail("Tried to click element %s but did not find it." % name) 
    else: 
     try: 
      self.driver.find_element_by_css_selector(selector) 
     except NoSuchElementException: 
      self.fail("Expected to find element %s but did not find it." % name) 

आपके मामले में, स्क्रीनशॉट कोड (self.driver.get_screenshot_as_file (screenshot_file_path)) self.fail से पहले जाना होगा।

इस कोड के साथ

, हर बार जब आप एक तत्व के साथ बातचीत करना चाहते हैं, तो आप self.findelement ('चयनकर्ता', 'तत्व नाम')