ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] 前言 登录这个场景在写用例的时候经常会有,我们可以把登录封装成一个方法,然后把账号和密码参数化,这样以后用的登录的时候,只需调用这个方法就行了 <br /> ## 一、登录方法 1. 把输入账号、输入密码、点击登录按钮三个步骤写成一个方法 2. 然后把输入的账号和密码参数化 ``` from selenium import webdriver import unittest from time import sleep class Blog(unittest.TestCase): '''登录博客''' def setUp(self): self.driver = webdriver.Chrome() url = "https://account.cnblogs.com/signin" self.driver.get(url) self.driver.implicitly_wait(30) def login(self, username, password): '''这里写了一个登录的方法,账号和密码参数化''' self.driver.find_element_by_id("mat-input-0").send_keys(username) self.driver.find_element_by_id("mat-input-1").send_keys(password) self.driver.find_element_by_css_selector(".mat-button-wrapper").click() sleep(3) ``` <br /> ## 二、用例 1. 下面的用例可以调用前面写的登录方法,这样不用每次都去走登录流程 2. 判断是否登录成功,我这里是取的登录成功后的账户名 ``` def test_01(self): '''登录案例参考:正确账号、密码''' self.login("栀楠", "xxxxx") # 调用登录方法 # 获取登录后的账号名称 text = self.driver.find_element_by_id("lnk_current_user").text print(text) # 断言实际结果与预期结果一致 self.assertEqual(text, "栀楠") def test_02(self): '''登录案例参考:正确账号,错误密码''' self.login("栀楠", "xxxxx") # 登录方法 # 获取登录后的账号名称 text = self.driver.find_element_by_id("lnk_current_user").text print(text) # 断言实际结果与预期结果一致 self.assertEqual(text, "栀楠") ``` <br /> ## 三、判断方法封装 1. 如果用上面的方法去判断的话,有个缺陷,当登录不成功的时候,页面是不会跳转的,所以查找元素会报异常: NoSuchElementException: Message: Unable to locate element: {"method":"id","selector":"lnk\_current\_user"} 2. 这个时候就简单封装下判断方法:获取到账户名返回Ture;没有获取到返回False ``` def is_login_sucess(self): '''判断是否获取到登录账号名称''' try: text = self.driver.find_element_by_id("lnk_current_user").text print(text) return True except: return False ``` <br /> ## 四、优化后案例 1. 优化后的登录案例如下,这样看起来更清楚了 ``` def test_01(self): '''登录案例参考:正确账号、密码''' self.login("栀楠", "cheng19940703") # 调用登录方法 # 判断结果 result = self.is_login_sucess() self.assertTrue(result) def test_02(self): '''登录案例参考:正确账号,错误密码''' self.login("栀楠", "1111") # 判断结果 result = self.is_login_sucess() self.assertFalse(result,"密码错误,断言成功") ``` <br /> ## 五、参考代码 ``` from selenium import webdriver import unittest from time import sleep class Blog(unittest.TestCase): '''登录博客''' def setUp(self): self.driver = webdriver.Chrome() url = "https://account.cnblogs.com/signin" self.driver.get(url) self.driver.implicitly_wait(30) def login(self, username, password): '''这里写了一个登录的方法,账号和密码参数化''' self.driver.find_element_by_id("mat-input-0").send_keys(username) self.driver.find_element_by_id("mat-input-1").send_keys(password) self.driver.find_element_by_css_selector(".mat-button-wrapper").click() sleep(3) def is_login_sucess(self): '''判断是否获取到登录账号名称''' try: text = self.driver.find_element_by_id("lnk_current_user").text print(text) return True except: return False def test_01(self): '''登录案例参考:正确账号、密码''' self.login("栀楠", "xxxx") # 调用登录方法 # 判断结果 result = self.is_login_sucess() self.assertTrue(result) def test_02(self): '''登录案例参考:正确账号,错误密码''' self.login("栀楠", "123456") # 判断结果 result = self.is_login_sucess() self.assertFalse(result,"密码错误,断言成功") def tearDown(self): self.driver.quit() if __name__ == "__main__": unittest.main() ```