6

在不手动导出每个测试用例的情况下,如何将 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()
4

2 回答 2

3

我已经开始构建一个 Selenese 到 Python 的解析器 PySelenese,我已经在 Github 上发布了它。随意分叉/克隆存储库并尝试一下:http: //github.com/jpstacey/PySelenese

于 2010-04-27T18:37:04.587 回答
0

不,没有办法,但理论上它应该不会太难做,因为您需要做的就是使用 python-rc.js 转换文件。

于 2010-04-12T09:22:04.960 回答