在不手动导出每个测试用例的情况下,如何将 Selenium IDE 制作的测试用例转换为 Python?该工作是否有任何命令行转换器?
最后,我想在 unittest 中使用 Selenium RC 和 Python 来测试我的网站。
非常感谢。
更新:
我开始编写一个转换器,但是实现所有命令的工作量太大。有没有更好的办法?
从 xml.dom.minidom 导入解析 SeleneseParser 类: def __init__(self,selFile): self.dom = 解析(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.dom.getElementsByTagName('tbody')[0].childNodes 对于节点中的节点: 如果 node.nodeType == node.TEXT_NODE 和 node.data 中的“\n”: 继续 如果 node.nodeType == node.COMMENT_NODE: cmds.append(node.data) 如果 node.nodeType == node.ELEMENT_NODE: 命令 = [] 对于 node.childNodes 中的 c: 如果 c.nodeType == node.ELEMENT_NODE: 如果 len(c.childNodes) == 1: cmd.append(c.childNodes[0].data) 别的: cmd.append("") cmds.append(cmd) 返回命令 类 PythonConverter: def __init__(self,sourceFile): self.parser = SeleneseParser(sourceFile) self.dest = u'# -*- 编码:utf-8 -*-\n\nfrom selenium import selenium\nimport unittest, time, re\n' def getHeader(自我): 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' 定义获取内容(自我): self.dest += u'\n\tdef test_%s(self):\n\t\tsel = self.selenium\n' % self.parser.getTestName() 节点 = self.parser.getNodes() 对于节点中的节点: 如果类型(节点)是列表: 命令,目标,值 = 节点 [0],节点 [1],节点 [2] 如果 cmd == '商店': self.dest += u'\t\t%s = "%s"\n' % (值,目标) elif cmd == 'clickAndWait': self.dest += u'\t\tsel.click(u"%s")\n\t\tsel.wait_for_page_to_load("30000")\n' % (目标) elif cmd == '类型': self.dest += u'\t\tsel.%s(u"%s", u"%s")\n' % (cmd,target,value) elif cmd == '选择': self.dest += u'\t\tsel.select(u"%s", u"%s")\n' % (目标,值) 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 ' % 目标 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' % (值,目标) 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' % (值,目标) 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' % (值,目标) 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 ' % (目标) 别的: self.dest += u'\t\tsel.%s(u"%s")\n' % (cmd,target) #print cmd,目标,值 别的: self.dest += u'\t\t#%s\n' % 节点 def getFooter(自我): 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 转换(自我): self.getHeader() self.getContent() self.getFooter() 返回 self.dest p = PythonConverter('test_case.html') 打印 p.convert()