6

すべてのテスト ケースを手動でエクスポートせずに、Selenium IDE で作成されたテスト ケースを Python に変換するにはどうすればよいですか? その仕事のためのコマンドラインコンバーターはありますか?

最後に、Selenium RC と Python ビルドを unittest で使用して、Web サイトをテストしたいと考えています。

どうもありがとう。

アップデート:

コンバーターの作成を開始しましたが、すべてのコマンドを実装するには作業が多すぎます。もっと良い方法はありますか?

xml.dom.minidom インポート解析から

クラス SeleneseParser:
    def __init__(自己、selFile):
        self.dom = parse(selFile)

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

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

    デフォルト getNodes(self):
        コマンド = []
        ノード = self.dom.getElementsByTagName('tbody')[0].childNodes

        ノード内のノードの場合:
            node.nodeType == node.TEXT_NODE および node.data の「\n」の場合:
                継続する
            node.nodeType == node.COMMENT_NODE の場合:
                cmds.append(ノード.データ)
            node.nodeType == node.ELEMENT_NODE の場合:
                cmd = []
                node.childNodes の c の場合:
                    c.nodeType == node.ELEMENT_NODE の場合:
                        len(c.childNodes) == 1 の場合:
                            cmd.append(c.childNodes[0].data)
                        そうしないと:
                            cmd.append("")
                cmds.append(コマンド)
        コマンドを返す

クラス PythonConverter:
    def __init__(self,sourceFile):
        self.parser = SeleneseParser(sourceFile)        
        self.dest = u'# -*- コーディング: utf-8 -*-\n\nselenium から import selenium\nunittest、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'

    デフォルト getContent(self):
        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 コマンド == 'タイプ':
                    self.dest += u'\t\tsel.%s(u"%s", u"%s")\n' % (cmd,target,value)
                elif コマンド == 'select':
                    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\tAssertionError 以外、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\tAssertionError 以外、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\tAssertionError 以外、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\tAssertionError 以外、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\tAssertionError 以外、e: self.verificationErrors.append(str(e))\n ' % (目標)
                そうしないと:
                    self.dest += u'\t\tsel.%s(u"%s")\n' % (cmd,target)

                #printコマンド、ターゲット、値
            そうしないと:
                self.dest += u'\t\t#%s\n' % ノード

    デフォルト getFooter(self):
        self.dest += u'\n\tdef teaDown(self):\n\t\tself.selenium.stop()\n\t\tself.assertEqual([], self.verificationErrors)\n'
        self.dest += u'\nif __name__ == "__main__":\n\tunittest.main()'

    デフ変換(自己):
        self.getHeader()
        self.getContent()
        self.getFooter()
        self.dest を返す

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

2 に答える 2

3

Github に投稿した Selenese から Python へのパーサー PySelenese の構築を開始しました。http://github.com/jpstacey/PySeleneseのリポジトリを自由にフォーク/クローンして試してみてください。

于 2010-04-27T18:37:04.587 に答える
0

いいえ、方法はありませんが、理論的には、python-rc.js を使用してファイルを変換する必要があるだけなので、それほど難しくはないはずです。

于 2010-04-12T09:22:04.960 に答える