2010-04-11 10 views
5

सेलेनियम आईडीई द्वारा पाइथन में किए गए परीक्षण मामलों को हाथ से हर टेस्ट केस निर्यात किए बिना कैसे परिवर्तित किया जाएगा? क्या उस नौकरी के लिए कोई कमांड लाइन कनवर्टर है?सेलेनीज़ (एचटीएमएल) से पायथन प्रोग्रामेटिक रूप से कैसे परिवर्तित करें?

अंत में मैं अपनी वेबसाइटों का परीक्षण करने के लिए सेलेनियम आरसी और पायथन का निर्माण करना चाहता हूं।

बहुत बहुत धन्यवाद।

अद्यतन:

मैं एक कनवर्टर लेकिन इसकी बहुत ज्यादा काम सभी आदेशों को लागू करने के बारे में शुरू कर दिया। क्या कोई बेहतर तरीका है?

 
from xml.dom.minidom import parse 

class SeleneseParser: 
    def __init__(self,selFile): 
     self.dom = parse(selFile) 

    def getTestName(self): 
     return self.dom.getElementsByTagName('title')[0].firstChild.data 

    def getBaseUrl(self): 
     return self.dom.getElementsByTagName('link')[0].getAttribute('href') 

    def getNodes(self): 
     cmds = [] 
     nodes = self.dom.getElementsByTagName('tbody')[0].childNodes 

     for node in nodes: 
      if node.nodeType == node.TEXT_NODE and "\n" in node.data: 
       continue 
      if node.nodeType == node.COMMENT_NODE: 
       cmds.append(node.data) 
      if node.nodeType == node.ELEMENT_NODE: 
       cmd = [] 
       for c in node.childNodes: 
        if c.nodeType == node.ELEMENT_NODE: 
         if len(c.childNodes) == 1: 
          cmd.append(c.childNodes[0].data) 
         else: 
          cmd.append("") 
       cmds.append(cmd) 
     return cmds 

class PythonConverter: 
    def __init__(self,sourceFile): 
     self.parser = SeleneseParser(sourceFile)   
     self.dest = u'# -*- coding: utf-8 -*-\n\nfrom selenium import selenium\nimport unittest, time, re\n' 

    def getHeader(self): 
     self.dest += u'\nclass %s(unittest.TestCase):\n' % self.parser.getTestName() 
     self.dest += u'\tdef setUp(self):\n\t\tself.verificationErrors = []\n' 
     self.dest += u'\t\tself.selenium = selenium("localhost", 4444, "*chrome", "%s")\n' % self.parser.getBaseUrl() 
     self.dest += u'\t\tself.selenium.start()\n' 

    def getContent(self): 
     self.dest += u'\n\tdef test_%s(self):\n\t\tsel = self.selenium\n' % self.parser.getTestName() 

     nodes = self.parser.getNodes() 
     for node in nodes: 
      if type(node) is list: 
       cmd,target,value = node[0],node[1],node[2] 

       if cmd == 'store': 
        self.dest += u'\t\t%s = "%s"\n' % (value,target) 
       elif cmd == 'clickAndWait': 
        self.dest += u'\t\tsel.click(u"%s")\n\t\tsel.wait_for_page_to_load("30000")\n' % (target) 
       elif cmd == 'type': 
        self.dest += u'\t\tsel.%s(u"%s", u"%s")\n' % (cmd,target,value) 
       elif cmd == 'select': 
        self.dest += u'\t\tsel.select(u"%s", u"%s")\n' % (target,value) 
       elif cmd == 'verifyTextPresent': 
        self.dest += u'\t\ttry: self.failUnless(sel.is_text_present(u"%s"))\n\t\texcept AssertionError, e: self.verificationErrors.append(str(e))\n' % target 
       elif cmd == 'verifySelectedLabel': 
        self.dest += u'\t\ttry: self.assertEqual(u"%s", sel.get_selected_label(u"%s"))\n\t\texcept AssertionError, e: self.verificationErrors.append(str(e))\n' % (value,target) 
       elif cmd == 'verifyValue': 
        self.dest += u'\t\ttry: self.assertEqual(u"%s", sel.get_value(u"%s"))\n\t\texcept AssertionError, e: self.verificationErrors.append(str(e))\n' % (value,target) 
       elif cmd == 'verifyText': 
        self.dest += u'\t\ttry: self.assertEqual(u"%s", sel.get_text(u"%s"))\n\t\texcept AssertionError, e: self.verificationErrors.append(str(e))\n' % (value,target) 
       elif cmd == 'verifyElementPresent': 
        self.dest += u'\t\ttry: self.failUnless(sel.is_element_present(u"%s"))\n\t\texcept AssertionError, e: self.verificationErrors.append(str(e))\n' % (target) 
       else: 
        self.dest += u'\t\tsel.%s(u"%s")\n' % (cmd,target) 

       #print cmd,target,value 
      else: 
       self.dest += u'\t\t#%s\n' % node 

    def getFooter(self): 
     self.dest += u'\n\tdef tearDown(self):\n\t\tself.selenium.stop()\n\t\tself.assertEqual([], self.verificationErrors)\n' 
     self.dest += u'\nif __name__ == "__main__":\n\tunittest.main()' 

    def convert(self): 
     self.getHeader() 
     self.getContent() 
     self.getFooter() 
     return self.dest 

p = PythonConverter('test_case.html') 
print p.convert() 

उत्तर

0

नहीं वहाँ एक रास्ता नहीं है, लेकिन सिद्धांत रूप में यह करने के लिए भी मुश्किल नहीं होना चाहिए के रूप में तुम सब करने की जरूरत है कुछ अजगर-rc.js का उपयोग करता है फ़ाइल कन्वर्ट करना होगा।

+0

हां, लेकिन सवाल * * हर परीक्षण मामले को हाथ से निर्यात करने के अलावा * के बारे में पूछा गया। –

+0

मेरा जवाब अपडेट किया गया – AutomatedTester

3

मैंने एक सेलेनिस-टू-पायथन पार्सर, पायसेलेनीज़ बनाना शुरू कर दिया है, जिसे मैंने गिथब पर पोस्ट किया है। फोर्क/क्लोन को मुक्त करने के लिए स्वतंत्र महसूस करें और इसे आज़माएं: http://github.com/jpstacey/PySelenese

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