オブジェクト向けselenium+unittest自動化コードの最適化
pythonのUI自動化フレームワークは、コード最適化のために理解されているはずです.
テストを学ぶ過程で、抽象的で、勉強しにくいと同時に、一度に多くの知識に触れると忘れやすく、多くのトレーニング機関が出たり、テストを独学したりする友达に直面していることを発見しました.私のように自動化テストをするとき、pythonの静的な方法に満足しています.
静的メソッドは自動化の目的を満たすことができるので、pyファイルで直接メソッドを定義するのは便利ですが、階層関係がないのでメンテナンスが難しく、手順が理解しやすいように見えます.driverの山です.find_element_byはあまりにもlowに見えます.
満腹になったら最適化して、
1、共通pyファイルで、最も親レベルのクラスを定義し、他の機能に呼び出す
2、業務機能は共通クラスの子で、直接親クラスの方法を呼び出すことができる
conの下にプライベートメソッドがある場合は、呼び出しは下位レベルでなければなりません.
3、caseを編纂して、子級クラスをインスタンス化して、親級クラスの方法を呼び出すことができて、私有の方法はだめです
テストを学ぶ過程で、抽象的で、勉強しにくいと同時に、一度に多くの知識に触れると忘れやすく、多くのトレーニング機関が出たり、テストを独学したりする友达に直面していることを発見しました.私のように自動化テストをするとき、pythonの静的な方法に満足しています.
静的メソッドは自動化の目的を満たすことができるので、pyファイルで直接メソッドを定義するのは便利ですが、階層関係がないのでメンテナンスが難しく、手順が理解しやすいように見えます.driverの山です.find_element_byはあまりにもlowに見えます.
満腹になったら最適化して、
1、共通pyファイルで、最も親レベルのクラスを定義し、他の機能に呼び出す
# com_fun.py
class con(object)
def _init_(self,driver)
self.dr = driver.find_element_by_xpath
self.driver = driver
def login(self):
self.driver.get(nky_url)
self.dr("//input[@id='userName']").send_keys(username)
self.dr("//input[@id='password']").send_keys(password)
self.dr('//button[id="login"]').click()
time.sleep(5)
def quit(self):
self.dr(By.XPATH,"//button[@id='quit']").click()
""" , self , , """
# @staticmethod
def test1(self):
self.dr....
def login(driver,username,password):
driver.find_element_by_xpath('//input[id="username"]').send_keys(username)
driver.find_element_by_xpath('//input[id="password"]').send_keys(password)
driver.find_element_by_xpath('//button[id="login"]').click()
def quit(driver):
driver.find_elemnt_by_xpath("//button[@id='quit']").click()
if __name__ == '__main_':
browser = webdriver.Chrome()
#
login(browser)
quit(browser)
#
c = con(browser)
c.login()
c.quit()
""" , , , """
2、業務機能は共通クラスの子で、直接親クラスの方法を呼び出すことができる
conの下にプライベートメソッドがある場合は、呼び出しは下位レベルでなければなりません.
#
class add(con): # con
def byFood(self):
self.test1(self) #
self.dr("//") #
def byFood1(self): # ,
self.dr("")
3、caseを編纂して、子級クラスをインスタンス化して、親級クラスの方法を呼び出すことができて、私有の方法はだめです
# testcase
class By(unittest.TestCase):
""" """
@classmethod
def setUpClass(cls):
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
cls.driver = webdriver.Chrome(chrome_options=chrome_options)
cls.driver = webdriver.Chrome()
cls.add = add(cls.driver)
cls.driver.implicitly_wait(15)
cls.driver.set_window_size(1920, 1080)
cls.add.login()
@classmethod
def tearDownClass(cls):
cls.driver.quit()
def setUp(self):
self.driver.refresh()
def tearDown(self):
pass
def test_01_product(self):
""" """
self.add.byFood()
def test_02_product(self):
""" """
self.add.test1()
self.add.byFood1()