UI自動化測試實戰


前言

前面我們已經搭建好了wordpress網站,如果需要查看運行效果可以看我前面的搭建文章,下面我們來進行自動化測試的練習。

示例

首先我們測試自動登陸

import unittest
from selenium import webdriver
import uuid
from time import sleep

username = passwd = '***'
uid = str(uuid.uuid1())
suid = ''.join(uid.split('-'))
url = 'http://139.199.192.100:8000/wp-login.php'


class Test_Blog(unittest.TestCase):
    '''博客測試用例初始化配置'''
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get(url)
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()

    def tearDown(self):
        self.driver.quit()

class test_login(Test_Blog):
    '''博客登陸測試用例'''
    def test_login(self):        
        self.driver.find_element_by_id('user_login').send_keys(username)
        self.driver.find_element_by_id('user_pass').send_keys(passwd)
        self.driver.find_element_by_id('rememberme').click()
        self.driver.find_element_by_id('wp-submit').click()
        sleep(1)
        title_url = self.driver.current_url
        assert 'wp-admin' in title_url, '登陸不成功或者斷言錯誤'
        
if __name__ == '__main__':
    unittest.main()

登陸之后,我們來測試寫文章功能

import unittest
from selenium import webdriver
import uuid
from time import sleep

username = passwd = '***'
uid = str(uuid.uuid1())
suid = ''.join(uid.split('-'))
url = 'http://139.199.192.100:8000/wp-login.php'


class Test_Blog(unittest.TestCase):
    '''博客測試用例初始化配置'''
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get(url)
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()

    def tearDown(self):
        self.driver.quit()

class test_login(Test_Blog):
    '''博客登陸測試用例'''
    def test_login(self):        
        self.driver.find_element_by_id('user_login').send_keys(username)
        self.driver.find_element_by_id('user_pass').send_keys(passwd)
        self.driver.find_element_by_id('rememberme').click()
        self.driver.find_element_by_id('wp-submit').click()
        sleep(1)
        title_url = self.driver.current_url
        assert 'wp-admin' in title_url, '登陸不成功或者斷言錯誤'
        

class test_write_Blog(Test_Blog):
    '''博客寫文章測試用例'''
    def test_write_blog(self):
        
        self.driver.find_element_by_id('user_login').send_keys(username)
        self.driver.find_element_by_id('user_pass').send_keys(passwd)
        self.driver.find_element_by_id('rememberme').click()
        self.driver.find_element_by_id('wp-submit').click()
        sleep(1)
        self.driver.find_element_by_css_selector(
            '#menu-posts > a >.wp-menu-name').click()
        self.driver.find_element_by_css_selector('.page-title-action').click()

        self.driver.find_element_by_css_selector(
            'div.components-modal__header > button > svg').click()
        sleep(1)
        self.driver.find_element_by_css_selector(
            '#post-title-0').send_keys(suid)
        self.driver.find_element_by_css_selector(
            '#post-content-0').send_keys(suid)
        self.driver.find_element_by_css_selector(
            'button.components-button.editor-post-publish-panel__toggle.editor-post-publish-button__button.is-primary').click()
        self.driver.find_element_by_css_selector(
            'div.editor-post-publish-panel__header-publish-button > button').click()

        blog_status = self.driver.find_element_by_css_selector(
            'div.components-panel__body.post-publish-panel__postpublish-header.is-opened').text
        assert '已被發布' in blog_status, '文章未發布或斷言錯誤'


if __name__ == '__main__':
    unittest.main()

寫文章測試完了,該把文章刪除掉了,於是我們再來進行刪除的測試用例,並且優化了登陸的代碼

import unittest
from selenium import webdriver
import uuid
from time import sleep

from selenium.webdriver.common.action_chains import ActionChains

username = passwd = '***'
uid = str(uuid.uuid1())
suid = ''.join(uid.split('-'))
url = 'http://139.199.192.100:8000/wp-login.php'


class Test_Blog(unittest.TestCase):
    '''博客測試用例前置和后置'''

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get(url)
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()
        self.driver.find_element_by_id('user_login').send_keys(username)
        self.driver.find_element_by_id('user_pass').send_keys(passwd)
        self.driver.find_element_by_id('rememberme').click()
        self.driver.find_element_by_id('wp-submit').click()
        sleep(1)

    def tearDown(self):
        self.driver.quit()


class test_login(Test_Blog):
    '''博客登陸測試用例'''

    def test_login(self):
        title_url = self.driver.current_url
        assert 'wp-admin' in title_url, '登陸不成功或者斷言錯誤'


class test_write_Blog(Test_Blog):
    '''博客寫文章測試用例'''

    def test_write_blog(self):
        self.driver.find_element_by_css_selector(
            '#menu-posts > a >.wp-menu-name').click()
        self.driver.find_element_by_css_selector('.page-title-action').click()      #點擊寫文章
        sleep(1)
        self.driver.find_element_by_css_selector(
            'div.components-modal__header > button > svg').click()      #關閉彈窗
        self.driver.find_element_by_css_selector(
            '#post-title-0').send_keys(suid)        #寫標題
        self.driver.find_element_by_css_selector(
            '#post-content-0').send_keys(suid)      #寫文本
        self.driver.find_element_by_css_selector(
            'button.components-button.editor-post-publish-panel__toggle.editor-post-publish-button__button.is-primary').click()     #點擊發布
        self.driver.find_element_by_css_selector(
            'div.editor-post-publish-panel__header-publish-button > button').click()    
        blog_status = self.driver.find_element_by_css_selector(
            'div.components-panel__body.post-publish-panel__postpublish-header.is-opened').text     #獲取發布狀態
        assert '已被發布' in blog_status, '文章未發布或斷言錯誤'


class Test_Delete_Blog(Test_Blog):
    '''博客刪除測試用例'''

    def test_delete_blog(self):
        self.driver.find_element_by_css_selector(
            '#menu-posts > a >.wp-menu-name').click()
        mouse = self.driver.find_elements_by_css_selector(
            'td.author.column-author > a')[0]  # 定位第一行作者元素
        ActionChains(self.driver).move_to_element(mouse).perform()  # 鼠標懸停到第一行
        blog_title_old = self.driver.find_elements_by_css_selector(
            'td.title.column-title.has-row-actions.column-primary.page-title > div.row-actions > span.trash > a')[0].text
        self.driver.find_elements_by_css_selector(
            'td.title.column-title.has-row-actions.column-primary.page-title > div.row-actions > span.trash > a')[0].click()
        blog_title_new = self.driver.find_elements_by_css_selector(
            'td.title.column-title.has-row-actions.column-primary.page-title > div.row-actions > span.trash > a')[0].text
        assert blog_title_old != blog_title_new  # 判斷刪除前和刪除后的同一元素位置的文本不相等


if __name__ == '__main__':
    unittest.main()

感覺還是有很多重復的代碼,我們可以在進行優化

import unittest
from selenium import webdriver
import uuid
from time import sleep

from selenium.webdriver.common.action_chains import ActionChains

username = passwd = '***'
uid = str(uuid.uuid1())
suid = ''.join(uid.split('-'))
url = 'http://139.199.192.100:8000/wp-login.php'



class Test_Blog(unittest.TestCase):
    '''博客測試用例前置和后置'''

    def element_find_func(self,e):
        return self.driver.find_element_by_css_selector(e)

    def elements_find_func(self,e):
        return self.driver.find_elements_by_css_selector(e)

    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.get(url)
        self.driver.implicitly_wait(10)
        self.driver.maximize_window()
        self.element_find_func('#user_login').send_keys(username)
        self.element_find_func('#user_pass').send_keys(passwd)
        self.element_find_func('#rememberme').click()
        self.element_find_func('#wp-submit').click()
        sleep(1)

    def tearDown(self):
        self.driver.quit()


class test_login(Test_Blog):
    '''博客登陸測試用例'''

    def test_login(self):
        title_url = self.driver.current_url
        assert 'wp-admin' in title_url, '登陸不成功或者斷言錯誤'


class test_write_Blog(Test_Blog):
    '''博客寫文章測試用例'''

    def test_write_blog(self):
        self.element_find_func(
            '#menu-posts > a >.wp-menu-name').click()
        self.element_find_func(
            '.page-title-action').click()       # 點擊寫文章
        sleep(1)
        self.element_find_func(
            'div.components-modal__header > button > svg').click()      # 關閉彈窗
        self.element_find_func(
            '#post-title-0').send_keys(suid)        # 寫標題
        self.element_find_func(
            '#post-content-0').send_keys(suid)      # 寫文本
        self.element_find_func(
            'button.components-button.editor-post-publish-panel__toggle.editor-post-publish-button__button.is-primary').click()     # 點擊發布
        self.element_find_func(
            'div.editor-post-publish-panel__header-publish-button > button').click()
        blog_status = self.element_find_func(
            'div.components-panel__body.post-publish-panel__postpublish-header.is-opened').text     # 獲取發布狀態
        assert '已被發布' in blog_status, '文章未發布或斷言錯誤'


class Test_Delete_Blog(Test_Blog):
    '''博客刪除測試用例'''

    def test_delete_blog(self):
        self.element_find_func(
            '#menu-posts > a >.wp-menu-name').click()
        mouse = self.elements_find_func(
            'td.author.column-author > a')[0]                               # 定位第一行作者元素
        ActionChains(self.driver).move_to_element(mouse).perform()          # 鼠標懸停到第一行
        blog_title_old = self.elements_find_func(
            'td.title.column-title.has-row-actions.column-primary.page-title > div.row-actions > span.trash > a')[0].text       #定位多個元素中取第一個
        self.elements_find_func(
            'td.title.column-title.has-row-actions.column-primary.page-title > div.row-actions > span.trash > a')[0].click()
        blog_title_new = self.elements_find_func(
            'td.title.column-title.has-row-actions.column-primary.page-title > div.row-actions > span.trash > a')[0].text
        assert blog_title_old != blog_title_new                             # 判斷刪除前和刪除后的同一元素位置的文本不相等


if __name__ == '__main__':
    unittest.main()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM