1. 程式人生 > 實用技巧 >【原創】python+selenium+ddt+unittest實現web功能自動化測試

【原創】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))