SeleniumBase框架中能否修改BaseCase类添加自定义登录方法?
问题答复
完全可以这么做,这是基于SeleniumBase开展多角色权限测试的常规通用实践,落地时注意几个要点即可:
- 不要直接修改SeleniumBase框架原生的
BaseCase源码,你可以自己新建一个继承自sbase.BaseCase的自定义测试基类,所有和登录相关的通用逻辑都封装在这个自定义基类中,后续升级SeleniumBase版本不会覆盖你写的自定义逻辑。 - 可以按角色拆分语义明确的独立登录方法,比如
login_as_admin()、login_as_editor()、login_as_normal_user(),每个方法内部封装对应角色的账号读取、登录页跳转、表单填写、提交、登录成功校验的全流程;账号密码不要硬编码在代码里,统一从测试配置文件、环境变量或者测试数据服务中读取。 - 如果不同角色的登录操作流程完全一致,只有账号凭证差异,也可以只封装一个通用
login(user_role)方法,内部根据传入的角色参数匹配对应账号,走统一登录流程,减少重复代码。 - 编写测试用例时,所有用例类统一继承你自定义的这个基类,需要哪个角色的测试场景,直接调用对应登录方法即可,不用在每个用例里重复编写登录步骤。
参考实现代码如下:
from sbase import BaseCase # 自定义全局测试基类 class ProjectBaseCase(BaseCase): def login_as_admin(self): # 从配置读取管理员账号信息 admin_acc = self.config.get("ADMIN_ACCOUNT") admin_pwd = self.config.get("ADMIN_PASSWORD") self.open("/login") self.type("#username-input", admin_acc) self.type("#password-input", admin_pwd) self.click("#login-submit") # 增加登录成功校验,避免后续步骤执行时登录未完成 self.assert_element(".admin-dashboard-entry", timeout=10) def login_as_normal_user(self): user_acc = self.config.get("NORMAL_USER_ACCOUNT") user_pwd = self.config.get("NORMAL_USER_PASSWORD") self.open("/login") self.type("#username-input", user_acc) self.type("#password-input", user_pwd) self.click("#login-submit") self.assert_element(".personal-center-entry", timeout=10) # 测试用例示例 class TestPermissionControl(ProjectBaseCase): def test_admin_can_access_user_management(self): self.login_as_admin() self.open("/system/user-management") self.assert_text("用户管理", "h1") def test_normal_user_forbidden_user_management(self): self.login_as_normal_user() self.open("/system/user-management") self.assert_text("您暂无该页面访问权限", ".error-container")
额外注意:如果单个测试用例里需要切换多个角色验证权限,切换账号前一定要先调用
self.clear_cookies()清除上一个用户的登录态,避免出现账号串号、登录态残留的问题,导致测试结果不符合预期。
内容的提问来源于stack exchange,提问作者Shankar Sampath
相关产品推荐
相关产品推荐

