【原创】python+selenium+ddt+unittest实现web功能自动化测试
前期准备:
pip install selenium
pip install ddt
以下代码实现内容:
对页面提交表单时带有特殊字符情况的验证
# coding=utf-8 import time import unittest import ddt from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC @ddt.ddt class Test_psnickname(unittest.TestCase): def setUp(self): """启动浏览器""" global browser browser = webdriver.Chrome() browser.get('URL') browser.maximize_window() browser.find_element_by_xpath('//input[@name="username"]').send_keys('username') browser.find_element_by_xpath('//input[@name="password"]').send_keys('password') time.sleep(1) browser.find_element_by_xpath('//button[@class="el-button el-button--primary"]').click() browser.implicitly_wait(10) time.sleep(2) @ddt.data(['abcdefg', '操作成功'], ['ABCDEFG', '操作成功'], ['123456', '操作成功'], ['`', '操作成功'], ['~', '操作成功'], ['!', '操作成功'], ['@', '操作成功'], ['#', '操作成功'], ['$', '操作成功'], ['%', '操作成功'], ['^', '操作成功'], ['&', '操作成功'], ['*', '操作成功'], ['(', '操作成功'], [')', '操作成功'], ['-', '操作成功'], ['_', '操作成功'], ['=', '操作成功'], ['+', '操作成功'], ['[', '操作成功'], [']', '操作成功'], ['{', '操作成功'], ['}', '操作成功'], ['\\', '操作成功'], ['|', '操作成功'], [';', '操作成功'], [':', '操作成功'], ["'", '操作成功'], [',', '操作成功'], ['<', '操作成功'], ['.', '操作成功'], ['>', '操作成功'], ['/', '操作成功'], ['?', '操作成功'], ['·', '操作成功'], ['!', '操作成功'], ['¥', '操作成功'], ['……', '操作成功'], ['(', '操作成功'], [')', '操作成功'], ['——', '操作成功'], ['【', '操作成功'], ['{', '操作成功'], ['】', '操作成功'], ['}', '操作成功'], ['、', '操作成功'], [';', '操作成功'], [':', '操作成功'], ['’', '操作成功'], ['‘', '操作成功'], ['“', '操作成功'], ['”', '操作成功'], [',', '操作成功'], ['《', '操作成功'], ['。', '操作成功'], ['》', '操作成功'], ['?', '操作成功'], ['Aa测试123?@*&%', '操作成功'], ['测试昵称', '操作成功']) @ddt.unpack def test_1(self, value, expect_value): """验证个人设置内昵称字符的限制""" browser.find_element_by_xpath('//div[@class="avatar-wrapper el-dropdown-selfdefine"]').click() time.sleep(1) locator1 = ('class name', 'el-dropdown-menu__item') WebDriverWait(browser, 10).until(EC.presence_of_element_located(locator1)) browser.find_element_by_xpath('//li[text()="个人设置"]').click() locator2 = ('class name', 'header') WebDriverWait(browser, 10).until(EC.presence_of_element_located(locator2)) time.sleep(1) browser.find_elements_by_xpath('//input[@class="el-input__inner"]')[1].clear() browser.find_elements_by_xpath('//input[@class="el-input__inner"]')[1].send_keys(value) browser.find_element_by_xpath('//span[text()="保存"]').click() locator3 = ('class name', 'el-message__content') WebDriverWait(browser, 10).until(EC.presence_of_element_located(locator3)) self.assertIsNotNone(browser.find_element_by_xpath('//p[text()="%s"]' % expect_value)) time.sleep(1) self.assertIsNotNone(browser.find_element_by_xpath('//span[text()="%s"]' % value)) def tearDown(self): """清除测试环境""" time.sleep(1) browser.quit() if __name__ == '__main__': unittest.main()
代码解释:
selenium负责元素定位,ddt装饰器负责整理特殊字符,以便用一条用例执行完所有测试场景,unittest负责整理测试用例,以及提供setup和teardown方法
进阶功能:
1.跳转选项卡
browser.switch_to.window(browser.window_handles[1])
2.跳转frame
browser.switch_to.frame()
3.显示等待
browser.implicitly_wait(10)
4.隐式等待
locator1 = ('class name', 'el-dropdown-menu__item')
WebDriverWait(browser, 10).until(EC.presence_of_element_located(locator1))
积极拥抱前沿技术的软件测试工程师