Python_selenium PO模式下 Tesecase 的相同执行代码做成selenium_base_case公共模块及调用
作用:
PO模式下 Tesecase 的相同执行代码做成selenium_base_case公共模块及调用,提高代码简洁度,实现同样效果。
框架结构:
代码简单实践:
common模块下 selenium_base_case.py :
#coding=gbk
import unittest
from common.base_page import BasePage
from common.set_driver import set_driver
from common.config_utils import config
class SeleniumBaseCase(unittest.TestCase):
def setUp(self) -> None:
self.base_page = BasePage(set_driver())
self.base_page.set_browser_max()
self.base_page.implicitly_wait()
self.base_page.open_url(config.get_url)
def tearDown(self) -> None:
self.base_page.close_tab()
login模块对该方法进行调用,并希望在自己的初始化中单独增加内容可如下操作:
#coding=gbk
import unittest
from common.set_driver import set_driver
from common.base_page import BasePage
from actions.login_action import LoginAction
from common.config_utils import config
from common.selenium_base_case import SeleniumBaseCase #引入公共模块下的SeleniumBaseCase类
class LoginTest(SeleniumBaseCase):
#希望再增加初始化代码:
def setUp(self) -> None:
super().setUp()
print('hello,我是执行公共的setup后再增加执行的')
def test_login_success(self):
login_action = LoginAction( self.base_page.driver )
main_page = login_action.login_success('admin','201314ANQIER1')
actual_result = main_page.get_username()
self.assertEqual(actual_result,'admin','test_login_success用例执行失败')
main测试模块调用,直接使用公共初始化即可,那么代码可编写如下:
#coding=gbk
import unittest
from common.set_driver import set_driver
from common.base_page import BasePage
from actions.login_action import LoginAction
from actions.quit_action import QuitAction
from common.config_utils import config
from common.selenium_base_case import SeleniumBaseCase
class QuitTest(SeleniumBaseCase): #直接写案例即可
def test_quit(self):
login_action = LoginAction(self.base_page.driver)
main_page = login_action.default_login()
main_page.wait(3)
print("登录成功")
quit_action = QuitAction( main_page.driver )
login_page = quit_action.quit()
actual_result = login_page.get_title()
print(actual_result)
self.assertEqual( actual_result.__contains__('用户登录'),True,'test_quit用例不通过' )
if __name__=='__main__':
unittest.main()
实现原理:
SeleniumBaseCase 为 所有XX.test.py 的父类类 。
unittest.TestCase 为SeleniumBaseCase 类的父类,所以XX.test.py 通过集成SeleniumBaseCase 类间接也集成了unittest.TestCase 类。