オブジェクト向けselenium+unittest自動化コードの最適化

13577 ワード

pythonのUI自動化フレームワークは、コード最適化のために理解されているはずです.
テストを学ぶ過程で、抽象的で、勉強しにくいと同時に、一度に多くの知識に触れると忘れやすく、多くのトレーニング機関が出たり、テストを独学したりする友达に直面していることを発見しました.私のように自動化テストをするとき、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()