2010-04-11 18 views
5

Her test vakasını elle dışa aktarmadan Selenium IDE tarafından Python'a yapılan test senaryolarını nasıl değiştirebilirim? Bu iş için herhangi bir komut satırı dönüştürücü var mı?Selenese (html) Python nasıl programlamalı olarak dönüştürülür?

Web sitemi test etmek için, Selenium RC ve Pythons derlemelerini kullanmak istemiyorum.

Çok teşekkürler.

Güncelleme:

tüm komutları uygulamak için bir dönüştürücü ama onun çok iş yazmaya başladı. Daha iyi bir yolu var mı?

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

cevap

0

yok bir yolu yoktur ama yapmanız gereken tüm dosyayı dönüştürmek için python-rc.js kullanan bir şey var olduğu gibi teoride bunu yapmak için çok zor olmamalı.

+0

Evet, ama sorulan soru * "her test vakasını el ile dışa aktarma" dışında. –

+0

Cevabımı güncellendi – AutomatedTester

3

Github'a gönderdiğim bir Selenese-Python ayrıştırıcısı PySelenese oluşturmaya başladım. Depoyu çatalla/klonlamaya çekin ve bir deneyin: http://github.com/jpstacey/PySelenese.

İlgili konular