Python + Selenium 使用 unittest 编写自动化测试用例

我们使用之前演示过的 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。主要用于配合断言方法。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值