1

Selenium を使用して Django アプリケーションをテストしたいと考えています。私が読んだところによると、Django はすでにテスト部分をカバーしており、独自のテストを作成できるようになっています。

これをSeleniumで使用したいのですが、これが私のもの<application>/test.pyです:

from some.path.to.my.utilitary.module import TestTools


class FormTestCase(TestCase):
    def setUp(self):
        self.webui = TestTools()

    def test_advanced_settings(self):
        self.webui.go_to('home')
        self.webui.click('id', 'button-advanced-settings')
        self.webui.click('id', 'id_setting_0')
        self.webui.click('id', 'id_setting_1')
        self.webui.click('id', 'id_setting_2')
        self.webui.click('id', 'id_setting_3', submit=True)

    def test_zone_selector(self):
        self.webui.go_to('home')
        self.webui.click('id', 'button-zone-selector')

Selenium ロジック ( TestTools) を実装した Python クラスを作成したので、Django アプリケーションでのテスト コードの作成に集中できます。

class TestTools():
    def __init__(self):
        self.driver = webdriver.Firefox(...)
        ...

    # Those methods use self.driver to do things

    def click(...):
        ...

    def go_to(...):
        ...

    def quit(...):
        ...

__init__子のメソッドをオーバーライドできないことに気付いたので、メソッドTestCaseに入れました。ただし、(私が推測する各テスト メソッドに対して) 2 回呼び出されるため、2 つの Web ドライバーが作成されます。self.webui = TestTools()setUp

私がやりたいことは、 を実行./manage testし、ブラウザを 1 つだけ開き、その上ですべてのテストを実行することです。webdriver の初期化はどこで行うべきですか?

ありがとう、

4

1 に答える 1

1

これが私の洞察です。

私はLiveServerTestCaseTestCaseに基づいてカスタムを作成することを好みます:

class SeleniumTestCase(LiveServerTestCase):
    """
    A base test case for selenium, providing different helper methods.
    """

    def setUp(self):
        self.driver = WebDriver()

    def tearDown(self):
        self.driver.quit()

    def open(self, url):
        self.driver.get("%s%s" % (self.live_server_url, url))

次に、すべてのテスト ケースは this から派生しますSeleniumTestCase

それが役立つことを願っています。

于 2013-06-05T10:29:28.083 に答える