2012-07-10 25 views
7

के लिए फैक्टरी-पैटर्न वर्तमान में मैं सेलेनियम और प्रोबोस्किस का उपयोग कर एक स्वचालित परीक्षण सूट लिखने की कोशिश कर रहा हूं। मैं फैक्ट्री पैटर्न के माध्यम से वेबड्राइवर को अमूर्त करने और कार्यान्वित करने की कोशिश कर रहा हूं। Page_object कक्षा भी यहां बनाई गई है, जो वस्तु बनाने के दौरान वेबड्राइवर को तर्क के रूप में लेती है। नीचे कोड है।सेलेनियम वेबड्राइवर

 import selenium.webdriver as webdriver 
    from proboscis import TestProgram 
    from proboscis import test 
    from proboscis import before_class 
    from proboscis import after_class  

    class WebdriverFactory: 
     @staticmethod 
     def getWebdriver(browserName): 
      if(browserName == 'firefox'): 
      return webdriver.Firefox() 
      elif(browserName == 'chrome'): 
      return webdriver.Chrome() 
      elif(browserName == 'ie'): 
      return webdriver.Ie()   

      raise Exception("No such " + browserName + " browser exists") 

    class Page_Object: 
    def __init__(self, driver): 
     self.driver = driver 

    def go_to_home(self): 
     self.driver.get("http://google.com") 
     return self 
    def go_to_page(self,url): 
     self.driver.get(url) 
     return self 
    def run_search(self, url, query): 
     self.driver.get(url) 
     self.driver.find_element_by_id(locators['search_box']).send_keys(query) 
     self.driver.find_element_by_id(locators['search_button']).click() 

    def tear_down(self): 
     self.driver.close() 

    @test(groups=['selenium']) 
    class Test_Scripts: 

    @test(groups=['WebDemo']) 
    def test_1(self): 
     driver = WebdriverFactory.getWebdriver("firefox") 
     pageObj = Page_Object(driver) 
     pageObj.run_search("http://google.com",'apples') 
     pageObj.tear_down()  
    def run_tests(self): 
     TestProgram().run_and_exit() 

    Test_Scripts().run_tests() 

क्या यह करने का यह सही तरीका है? या क्या कोई बेहतर समाधान संभव है? यदि आपको कुछ बेवकूफ लगता है तो कृपया मेरी लापरवाही को इंगित करें और अनदेखा करें क्योंकि मैं पाइथन और सेलेनियम के लिए नया हूं।

+1

वास्तव में हैरान है कि इस सवाल पर अधिक ध्यान नहीं दिया गया है :( –

उत्तर

2

आप पेज ऑब्जेक्ट को सही तरीके से कार्यान्वित कर रहे हैं, जिसमें आप इसे अधिकांश तरीके से कर रहे हैं।

मैंने पेज ऑब्जेक्ट्स को थोड़ा अलग तरीके से किया है - उन्हें तुरंत चालू करने के लिए वेबड्राइवर की आवश्यकता नहीं है। क्योंकि मैं अक्सर विभिन्न शरीर सामग्री के साथ कई पृष्ठों में चलाता हूं, लेकिन समान हेडर और पाद लेख अनुभाग। इसलिए प्रत्येक पृष्ठ ऑब्जेक्ट में हेडर/फ़ूटर लोकेटर और विधियों को डुप्लिकेट करने के बजाय, मेरे पास केवल शीर्षलेख के लिए एक अलग पृष्ठ obj है, और केवल पाद लेख के लिए। लेकिन फिर एक पृष्ठ का परीक्षण करने के लिए एकाधिक पेज ऑब्जेक्ट्स को तुरंत चालू करने के लिए 1 वेबड्राइवर का उपयोग करके, प्रतिमान का उल्लंघन करना प्रतीत होता था। तो मेरी पेज ऑब्जेक्ट्स वास्तव में केवल locators और विधियों का एक संग्रह है, और जरूरी नहीं कि एक वेबड्राइवर।

मुझे एहसास है कि आपने हेडर या फ़ुटर्स का उल्लेख नहीं किया है ... मुझे लगता है कि अधिकांश लोग वेब पेजरियवर के आसपास अपने पेज ऑब्जेक्ट्स का निर्माण क्यों करते हैं, प्रति पृष्ठ केवल 1 पेज ऑब्जेक्ट मानते हैं। मेरे मामले में, इसके परिणामस्वरूप पेज ऑब्जेक्ट्स में डुप्लिकेट कोड होगा। कुछ विचार करने के लिए। उम्मीद है की वो मदद करदे!

+1

पैट मीकर, क्या आपके पास साझा करने के लिए कुछ उदाहरण है जो मैं वास्तव में ढूंढ रहा हूं? वैसे, वर्तमान में [इस] (https: // github का उपयोग कर रहा है। कॉम/एनसीबीआई/रोबोटफ्रेमवर्क-पेजोबजेक्ट्स) शुरुआती बिंदु के रूप में, 'रोबोट फ्रेमवर्क' के साथ संयुक्त। जैसा कि आपने बताया है, सामान्य वस्तुएं हैं और प्रत्येक पृष्ठ पर दोहराना पसंद नहीं है। इसे पाने के लिए 'अस्थिरता' प्राप्त करने के लिए अजगर पर बहुत अधिक हाथ नहीं हैं काम कर रहे। – Rao

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