欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-03 18:17:19
看之前您应该了解了python的UI自动化框架结构,此为代码优化在学习测试过程中发现面对象很抽象,不好学习,同时一次性接触太多知识容易忘掉,就导致很多培训机构出来或者自学测试的朋友,像我一样在做自动化测试时,满足于python的静态方法。因为静态方法已经能够满足自动化的目的,直接在py文件中定义方法,虽然用起来比较方便,但因没有层级关系不好维护,而且看起来太容易理解步骤了,一堆driver.find_element_by看起来是在太low了。吃饱了撑的就来优化一下,1、在公共py文件中,定义最父级别...

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

本文地址:https://blog.csdn.net/qq_43400993/article/details/107298163