Flying Cat Penguin

ゆるゆる仕事、ソフトウェアテスティング関連のことについて綴ります。

Seleniumコードサンプル#1 要素の習得と操作

自動テストのための学習のため、Seleniumコードサンプル(要素の習得と操作)を実施してみます。

以前、読んだpython用の書籍だとすでに試せるサイトが大幅に変わってしまったので、
自分でHTMLファイルを作成して、疑似的に下記の構成を確認してみることにしました。

f:id:dandan_611:20200602171556p:plain

[画面イメージ]
f:id:dandan_611:20200602172807p:plain

今回は下記の内容を試してみました。
このサンプルのゴールは、単一ページの入力と操作を完遂することです。

【項目】
・要素の取得(by name)
・要素の操作
 ・テキストフォームの入力(Username,Password)
 ・ドロップダウンの選択(Month)
 ・ボタンを押す(Submit)

[selenium_html.py]

import unittest
import time
from selenium import webdriver
from selenium.webdriver.support.ui import Select

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("file:///C:/cygwin64/home/User/selenium/sample.html") # 個別で変えてください

    def test_samplehtml(self):
        # get the search textbox
        
        # input ID/PASS and push submit botton
        id = self.driver.find_element_by_name("Username")
        id.send_keys("odan")
        
        password = self.driver.find_element_by_name("Password")
        password.send_keys("odanPASS")
        
        dropdownlist = self.driver.find_element_by_name("Month")
        month_select_element = Select(dropdownlist)
        month_select_element.select_by_value("jul")
        
        time.sleep(5)
        
        self.driver.find_element_by_name("Submit").click();
        
        self.assertEqual(10, 10)

    def tearDown(self):
        # close the browser window
        self.driver.quit()

def SamplehtmlTestsuite():
    # select testcases for SearchTestSuite
    suite = unittest.TestSuite()
    suite.addTest(SearchTests('test_samplehtml'))  
    return suite

if __name__ == '__main__':
    runner = unittest.TextTestRunner(verbosity=2)
    runner.run(SamplehtmlTestsuite())

[sample.html]

<html>
<body>
	<!-- 入力フォーム -->
    <form id="loginForm">
        <label>Enter Username: </label>
        <input type="text" name="Username"/>
        <label>Enter Password: </label>
        <input type="password" name="Password"/>
        
        <!-- ドロップダウンリスト -->
        <select name="Month">
	        <option value="jan">1月</option>
			<option value="feb">2月</option>
			<option value="mar">3月</option>
			<option value="apr">4月</option>
			<option value="may">5月</option>
			<option value="jun">6月</option>
			<option value="jul">7月</option>
			<option value="aug">8月</option>
			<option value="sep">9月</option>
			<option value="oct">10月</option>
			<option value="nov">11月</option>
			<option value="dec">12月</option>
		</select>
		
	<!-- ボタン -->
        <input type="submit" name="Submit"/>
    </form>
    <a href="forgotPassword.html">Forgot Password ?</a>
</body>
</html>

【まとめ】
要素を見つけて、どれを使うのかは、テスト対象となるサイト次第なのだろうなと思いました。
そのため、自動テストを想定しておくならば、idやnameなどの要素をきちんと統一性をもって設計できているかを見る必要がありそうです。
(他の書籍を見てみると比較的xpathが利用されていそうなので、その使い方も重要になってきそう…)

次回は、この簡単なHTMLサイトでデータ駆動テストを作成してみたいと思います。