「Learning Selenium Testing Tools with Python」(2014年)を読みながら、Seleniumを触る #2 (unittest導入)

Learning Selenium Testing Tools with Python (English Edition)
- 作者:Gundecha, Unmesh
- 発売日: 2014/12/30
- メディア: Kindle版
テスト自動化ツールを触る機会が巡ってきたので、体系的にやり方を学ぶためにカキカキ…。
ちなみに…、下記のコードサンプルは、windows10の環境でのコードですので、Linux系統は別途カスタマイズしてください。
今回は、unittestを組み込んでみました。
組み込むことで概念として、新たに「TestRunnner」「TestSuite」「TestCase」も三つが出てきます。
この概念を利用することにより、テストケースとしての体裁を持ったスクリプトを作成することができました。
また、下記のコードでは、別ファイルでテストケースを定義したものを読み込んでいます。
テストタイプやテストケースとスクリプトを実行スクリプトと分離することでテストケースの再利用もやりやすくなって便利になってきました。(テストケースは全く同じですが…)
コードサンプル
[selenium_search_unittest.py]
import unittest from selenium import webdriver # import another testcases file from import_testcase import ImportTests class SearchTests(unittest.TestCase): def setUp(self): # create a new Chrome session self.driver = webdriver.Chrome(executable_path=r'C:/tmp/selenium/chromedriver_win32/chromedriver.exe') self.driver.implicitly_wait(30) self.driver.maximize_window() # navigate to page self.driver.get("https://www.google.co.jp") def test_search_by_keyword_selenium(self): # get the search textbox self.search_field = self.driver.find_element_by_name("q") self.search_field.clear() # enter search keyword and submit self.search_field.send_keys("selenium") self.search_field.submit() # get all the anchor elements which have title and URL displayed # currently on result page using find_elements_by_xpath method self.assertEqual(10, len(self.driver.find_elements_by_xpath('//a/h3'))) def test_search_by_keyword_odan(self): # get the search textbox self.search_field = self.driver.find_element_by_name("q") self.search_field.clear() # enter search keyword and submit self.search_field.send_keys("odan") self.search_field.submit() # get all the anchor elements which have title and URL displayed # currently on result page using find_elements_by_xpath method self.assertEqual(10, len(self.driver.find_elements_by_xpath('//a/h3'))) def tearDown(self): # close the browser window self.driver.quit() def SearchTestsuite(): # select testcases for SearchTestSuite suite = unittest.TestSuite() suite.addTest(SearchTests('test_search_by_keyword_selenium')) suite.addTest(SearchTests('test_search_by_keyword_odan')) suite.addTest(ImportTests('test_search_by_keyword_selenium')) suite.addTest(ImportTests('test_search_by_keyword_odan')) return suite if __name__ == '__main__': runner = unittest.TextTestRunner(verbosity=2) runner.run(SearchTestsuite()) # To run all module tests from command line # unittest.main(verbosity=2)
[import_testcase.py]
import unittest from selenium import webdriver class ImportTests(unittest.TestCase): def setUp(self): # create a new Chrome session self.driver = webdriver.Chrome(executable_path=r'C:/tmp/selenium/chromedriver_win32/chromedriver.exe') self.driver.implicitly_wait(30) self.driver.maximize_window() # navigate to page self.driver.get("https://www.google.co.jp") def test_search_by_keyword_selenium(self): # get the search textbox self.search_field = self.driver.find_element_by_name("q") self.search_field.clear() # enter search keyword and submit self.search_field.send_keys("selenium") self.search_field.submit() # get all the anchor elements which have title and URL displayed # currently on result page using find_elements_by_xpath method self.assertEqual(10, len(self.driver.find_elements_by_xpath('//a/h3'))) def test_search_by_keyword_odan(self): # get the search textbox self.search_field = self.driver.find_element_by_name("q") self.search_field.clear() # enter search keyword and submit self.search_field.send_keys("odan") self.search_field.submit() # get all the anchor elements which have title and URL displayed # currently on result page using find_elements_by_xpath method self.assertEqual(10, len(self.driver.find_elements_by_xpath('//a/h3'))) def tearDown(self): # close the browser window self.driver.quit()
ちなみに動かすとこんな感じ。
$ python search_unittest.py test_search_by_keyword_selenium (__main__.SearchTests) ... ok test_search_by_keyword_odan (__main__.SearchTests) ... ok test_search_by_keyword_selenium (import_testcase.ImportTests) ... ok test_search_by_keyword_odan (import_testcase.ImportTests) ... ok ---------------------------------------------------------------------- Ran 4 tests in 61.839s OK