我们使用之前演示过的 showdoc,编写一个登录的用例,并检查自定义项目是否存在。
首先,我们把这个过程先罗列出来:
- 打开登录页面
- 选择登录
- 输入用户名
- 输入密码
- 点击登录
- 验证自定义项目是否存在
由于这个项目登录后没有任何用户名标识,所以要想判断登录的账号是否正确,可以通过该用户下的项目来判断。
import unittest
import time
from selenium import webdriver
from vcode import ocr_b64 # 处理验证码的程序
class TestLogin(unittest.TestCase):
def setUp(self): # => setUp中处理浏览器初始化
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(10)
self.driver.maximize_window()
def page_contains(self, text): # => 写一个方法用于断言
'''
判断页面上是否包含某个文本
:params: text, 需要验证的文本
:return: True, False
'''
try:
self.driver.find_element_by_xpath('//*[contains(text(), %s)]' % text)
return True
except Exception:
return False
def test_login(self): # => 测试用例
driver = self.driver # => 少写点self 😀
# 打开登录页面
driver.get('https://www.showdoc.cc/user/login')
# 处理验证码
while True:
driver.find_element_by_css_selector(
'[placeholder="用户名/邮箱"]').send_keys('nemo1')
driver.find_element_by_css_selector(
'[placeholder="密码"]').send_keys('123456')
v_code = ocr_b64(driver.find_element_by_class_name(
'v_code_img').screenshot_as_base64) # => 识别验证码
driver.find_element_by_css_selector(
'[placeholder="验证码"]').send_keys(v_code)
driver.find_element_by_xpath('//button/*[text()="登录"]').click()
try:
# 如果弹出框出现,则说明验证码错误
driver.find_element_by_css_selector(
'.el-message-box .el-button--primary').click()
# 刷新页面
driver.refresh()
except:
# 如果弹出框不出现,则说明验证码正确
break
# 提取当前用户的项目
self.assertTrue(self.page_contains('Nemo的项目'), '自定义项目未找到')
def tearDown(self): # => 处理浏览器
time.sleep(3) # => 等一下查看下结果
self.driver.quit()
if __name__ == "__main__":
unittest.main()
代码说明:
from vcode import ocr_b64
:
关于验证码的处理,请参考文章:使用百度文字识别API识别验证码
setUp()
:
测试固件中的初始化方法主要处理浏览器的初始化过程。
tearDown()
:
测试固件中的清理方法仅用来处理浏览器的退出。
test_login()
:
测试方法包含操作过程、断言。
page_contains(text)
:
定义了一个方法,用来判断页面上某个文本是否存在,存在则返回 True。主要用于配合断言方法。