Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to convert Selenese (html) to Python programmatically?
    text
    copied!<p>How would I convert test cases made by Selenium IDE to Python without exporting every test case by hand? Is there any command line converter for that job?</p> <p>In the end I want to use Selenium RC and Pythons build in unittest to test my websites.</p> <p>Thanks a lot.</p> <p><strong>Update:</strong></p> <p>I started to write a converter but its too much work to implement all the commands. Is there any better way?</p> <pre> 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() </pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload