From 2d98cbb540760dafcce4c8487a4b8fc4f8b71427 Mon Sep 17 00:00:00 2001 From: wanshan Date: Thu, 20 Nov 2025 20:23:14 +0800 Subject: [PATCH] + [task#152439,doing,2h] add ui test for user module login --- module/user/test/lib/ui/login.ui.class.php | 53 ++++++++++++++++++++++ module/user/test/ui/login.php | 40 ++++++++++++++++ module/user/test/ui/page/login.php | 17 +++++++ 3 files changed, 110 insertions(+) create mode 100644 module/user/test/lib/ui/login.ui.class.php create mode 100755 module/user/test/ui/login.php create mode 100644 module/user/test/ui/page/login.php diff --git a/module/user/test/lib/ui/login.ui.class.php b/module/user/test/lib/ui/login.ui.class.php new file mode 100644 index 0000000000..93f853a7c2 --- /dev/null +++ b/module/user/test/lib/ui/login.ui.class.php @@ -0,0 +1,53 @@ +login(); + $form = $this->initForm('user', 'login', [], 'appIframe-my'); + $form->wait(1); + $userInfo = $form->dom->avatar->getText(); + if(empty($userInfo)) return $this->failed('登录后用户信息为空'); + return $this->success('使用正确账号密码登录测试通过'); + } + + /** + * 验证使用错误的登录信息登录系统 + * Verify login with incorrect account or password + */ + public function verifyLoginIncorrectCredentials($account = 'admin', $password = 'wrongpass') + { + $webRoot = $this->getWebRoot(); + // 确保干净会话,避免前序用例的登录态影响。 + $this->page->openURL($webRoot)->deleteCookie()->refresh(); + $form = $this->loadPage('user', 'login'); + $form->wait(1); + + if($form->dom->account) $form->dom->account->setValue($account); + if($form->dom->password) $form->dom->password->setValue($password); + if($form->dom->submit) $form->dom->submit->click(); + + $form->wait(1); + + $alertText = $form->dom->alertModal('text'); + if(empty($this->lang)) $this->initLang(); + if($alertText != $this->lang->user->loginFailed) return $this->failed('登录失败提示与预期不符', $alertText); + // 关闭提示框,避免遮挡后续元素。 + $form->dom->alertModal(); + + // 再次检查当前仍停留在登录页(未发生成功跳转)。 + $html = $form->getPageSource(); + $stillLogin = (strpos($html, 'id=\"loginForm\"') !== false) || (strpos($html, 'm=user') !== false && strpos($html, 'f=login') !== false); + if(!$stillLogin) return $this->failed('错误凭据却跳转到了其他页面'); + + if($account == 'admin') return $this->success('使用错误密码登录测试通过'); + return $this->success('不存在的用户登录测试通过'); + } +} \ No newline at end of file diff --git a/module/user/test/ui/login.php b/module/user/test/ui/login.php new file mode 100755 index 0000000000..25cfc493fa --- /dev/null +++ b/module/user/test/ui/login.php @@ -0,0 +1,40 @@ +#!/usr/bin/env php +id->range('1'); +$user->account->range('admin'); +$user->realname->range('管理员'); +$user->password->range($config->uitest->defaultPassword)->format('md5'); +$user->role->range('admin'); +$user->gen(1, false); +$__out = ob_get_clean(); +if($__out && strpos($__out, 'Duplicate entry') === false) echo $__out; + +$tester = new loginTester(); + +r($tester->verifyLoginCorrectCredentials()) && p('status,message') && e('SUCCESS,使用正确账号密码登录测试通过'); // 使用正确账号密码登录测试 +r($tester->verifyLoginIncorrectCredentials()) && p('status,message') && e('SUCCESS,使用错误密码登录测试通过'); // 使用错误密码登录测试 +r($tester->verifyLoginIncorrectCredentials('notexist')) && p('status,message') && e('SUCCESS,不存在的用户登录测试通过'); // 不存在的用户登录测试 + +$tester->closeBrowser(); \ No newline at end of file diff --git a/module/user/test/ui/page/login.php b/module/user/test/ui/page/login.php new file mode 100644 index 0000000000..370192d911 --- /dev/null +++ b/module/user/test/ui/page/login.php @@ -0,0 +1,17 @@ +xpath = array( + 'avatar' => '//*[@id="userMenu-toggle"]/div/div', + 'account' => "//*[@id='account']", + 'password' => "//*[@id='password']", + 'submit' => "//*[@id='submit']", + ); + + $this->dom->xpath = array_merge($this->dom->xpath, $this->xpath); + } +} \ No newline at end of file