3

私はPythonの初心者なので、ここで私の無知を我慢してください. たとえば、次の構造があるとします。

parentDir\
    runTests.py
    commonpageelements.py 
    testcases\
        __init__.py
        test1.py
        test2.py

webdriver を初期化し、runTests.py でページを開き、test1.py、test2.py などにパラメーターを渡したいと思います。この例では、test1.py のログイン テストがあります。また、共通のページ要素を含む pageelements.py ファイルも必要です。以下のpythonファイルについて詳しく説明します。

commonpageelements.py については、username="inspected_name" のようにさまざまな要素を定義するだけです。

runTests.py に対して次のことを試しました。

from selenium import webdriver
from testcases import *
import common_page_elements
import sys, unittest, re, time, os.path, logging

class RunTests(unittest.TestCase):

    def setUp(self):

        self.driver = webdriver.Firefox()

        self.driver.implicitly_wait(30)
        self.driver.get("http://url_for_page")  

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

    def test_loginLogout(username, password):
        test_login_logout("myusername", "mypassword")

    if __name__ == "__main__":
        unittest.main()

次に、test1.pyに次のものがあります。

class test1(username, password):

    def test_login_logout():
        driver = self.driver
        driver.get(self.base_url)
        driver.find_element_by_id(pageelements.textfield_username).clear()
        driver.find_element_by_id(pageelements.textfield_username).send_keys(username)
        driver.find_element_by_id(pageelements.textfield_password).clear()
        driver.find_element_by_id(pageelements.textfield_password).send_keys(password)
        driver.find_element_by_name(pageelements.button_submit).click()
        driver.find_element_by_id(pageelements.link_logout).click()

これを達成する方法が本当にわかりません。私はここで盲目的に飛んでいて、微調整を試みていますが、どこにも行きません. どんな助けでも大歓迎です!ありがとう

4

2 に答える 2

3

他の人は私よりも多くの価値を追加できるでしょうが、私が気付いたことがいくつかあります。

  • if __name__ == '__main__'最も外側のスコープにある必要があります (そうしないと、クラス内にとどまり、実行されません)。
  • をインポートするときはcommon_page_elements、 で参照しませんrun_tests.py。のようなものを定義している場合は、その前usernameに明示的に参照する必要がありますcommon_page_elements
  • 関数では、test_loginLogout2 つのパラメーターを渡しています。私は専門家ではありませんが、変数以外selfがテスト ケースに渡される状況を見たことがありません。したがって、test_login_logoutから関数を適切に呼び出すようにコードを再構築したとしてもtest1.py、渡していませんself(これは の内容を保持しsetUpます。したがって、これは機能しません。
  • 異なるモジュールからテストを実行する場合各モジュールはテスト ケースと密閉されている必要があります。つまり、モジュールは独立して実行できる必要があります。あなたの場合、test1.py必要な設定で必要なレポートを実行するために必要な情報がないようです。
  • 上記の点を念頭に置いて、unittest.TestLoader().loadTestsFromModule()関数を使用すると、他のテスト モジュールを読み込んで実行できます。

これは完全にテストされていない (恐ろしいしゃれ、私が知っている) コードですが、次のようなものがあなたの状況でうまくいくかもしれません:

import logging, os.path, re, sys, time, unittest
from testcases import test1, test2

def main():
    # Create a loader object
    test_loader = unittest.TestLoader()

    # Add your tests
    suite = test_loader.loadTestsFromModule(test1)
    suite.addTests(test_loader.loadTestsFromModule(test2))

    # Run the tests
    unittest.TextTestRunner(verbosity=2).run(suite)

if __name__ == '__main__':
   unittest.main()

setUpとの部分についてはtearDown、テスト モジュール自体に配置すると、次のようになりますTest1Test

# test1.py

import common_page_elements as page_elements

from selenium import webdriver


class Test1Test(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)
        self.driver.get("http://url_for_page")  

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)

    def testLoginLogout(self):
        # Likely not necessary to redefine `driver` here - just use `self.driver`
        driver = self.driver
        # Not sure how this relates to the `get` in `setUp`
        driver.get(self.base_url)
        driver.find_element_by_id(page_elements.textfield_username).clear()
        driver.find_element_by_id(page_elements.textfield_username).send_keys(username)
        driver.find_element_by_id(page_elements.textfield_password).clear()
        driver.find_element_by_id(page_elements.textfield_password).send_keys(password)
        driver.find_element_by_name(page_elements.button_submit).click()
        driver.find_element_by_id(pageelements.link_logout).click()
于 2012-10-13T01:34:16.920 に答える
1

runTests.py を次のように書き直して、これを理解しました。

from selenium import webdriver
from testcases import login
import common_page_elements
import sys, unittest, re, time, os.path, logging

class runTests(unittest.TestCase):

    def setUp(self):
        self.driver = webdriver.Firefox()        
        self.driver.implicitly_wait(30)
        self.base_url = "http://url_for_page"
        self.driver.get(self.base_url)

    def testLogin(self):
        test1.test_login(self, "myusername", "mypassword") 

    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)


if __name__ == "__main__":
    unittest.main()


and test1.py as:

    import common_page_elements

    def test_login(self, username, password):
        driver = self.driver
        driver.get(self.base_url)
        driver.find_element_by_id(common_page_elements.textfield_username).clear()
        driver.find_element_by_id(common_page_elements.textfield_username).send_keys(username)
        driver.find_element_by_id(common_page_elements.textfield_password).clear()
        driver.find_element_by_id(common_page_elements.textfield_password).send_keys(password)
        driver.find_element_by_name(common_page_elements.button_submit).click() 
于 2012-10-12T20:34:50.233 に答える