面向对象方式优化selenium+unittest自动化代码

看之前您应该了解了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()

你可能感兴趣的:(selenium,测试)