面向对象方式优化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
上一篇: 针对外贸网站建设不同之处的分析