基於Selenium自動化測試框架的設計與實現

測試項目:基於MongoDB的文件服務器

功能介紹:

基於MongoDB的文件服務器支技所有文件的上傳、下載、查看、刪除。

項目技術:

  • Servlet
  • Freemarker模板引擎
  • Mongodb數據庫

項目界面:

 

Selenium框架自動化腳本

# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import Select
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import unittest, time, re,os

class Test(unittest.TestCase):
    def setUp(self):
        self.driver = webdriver.Chrome()
        self.driver.implicitly_wait(30)
        self.base_url = "http://192.168.24.131:9999/"
        self.verificationErrors = []
        self.accept_next_alert = True

    #上傳文件
    def test_upload(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_name("filename").clear()
        driver.find_element_by_name("filename").send_keys("C:\\Users\\10320\\Pictures\\006.jpg")
        driver.find_element_by_css_selector("input[type=\"submit\"]").click()
        driver.implicitly_wait(20)
        if driver.find_element_by_link_text("006.jpg").is_displayed():
            print("上傳成功")
        else:
            print("上傳失敗")
        driver.quit()
    #查看文件
    def test_view(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_xpath(u"(//a[contains(text(),'查看')])[3]").click()
        driver.implicitly_wait(20)
        handles = driver.window_handles #獲取當前打開的所有窗口的句柄
        print (handles)
        driver.switch_to.window(handles[1])#切換到第二個窗口的句柄
        print(driver.current_window_handle)
        print(driver.title)
        print(driver.current_url)
        driver.quit()
    #下載文件
    def test_download(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_link_text(u"007.jpg").click()
        driver.implicitly_wait(20);
        if os.path.exists(u"C:\\Users\\10320\\Pictures\\008.jpg"):
            print"下載成功"
        else:
            print"下載失敗"
        driver.quit()
    #刪除文件
    def test_delete(self):
        driver = self.driver
        driver.get(self.base_url + "/")
        driver.find_element_by_xpath(u"(//a[contains(text(),'刪除')])[3]").click()
        driver.implicitly_wait(20);
        print"刪除成功"
        driver.quit();
    #判斷element是否存在,可刪除
    def is_element_present(self, how, what):
        try: self.driver.find_element(by=how, value=what)
        except NoSuchElementException as e: return False
        return True
    #判斷alert是否存在,可刪除
    def is_alert_present(self):
        try: self.driver.switch_to_alert()
        except NoAlertPresentException as e: return False
        return True
    #關閉alert,可刪除
    def close_alert_and_get_its_text(self):
        try:
            alert = self.driver.switch_to_alert()
            alert_text = alert.text
            if self.accept_next_alert:
                alert.accept()
            else:
                alert.dismiss()
            return alert_text
        finally: self.accept_next_alert = True
    #清除環境
    def tearDown(self):
        self.driver.quit()
        self.assertEqual([], self.verificationErrors)
#執行用例
if __name__ == "__main__":
    unittest.main()

 輸出測試報告腳本

# -*- coding: utf-8 -*-
import unittest,csv
import os,sys
import time
import HTMLTestRunner
#手工添加案例到套件,
def createsuite():
    discover=unittest.defaultTestLoader.discover('../Test',pattern='TestPython.py',top_level_dir=None)
    print discover
    return discover
if __name__=="__main__":
    curpath=sys.path[0]
    #取當前時間
now=time.strftime("%Y-%m-%d-%H %M %S",time.localtime(time.time()))
if not os.path.exists(curpath+'/resultreport'):
    os.makedirs(curpath+'/resultreport')
filename=curpath+'/resultreport/'+now+'resultreport.html'
with open(filename,'wb') as fp:
    #出測試報告
 runner=HTMLTestRunner.HTMLTestRunner(stream=fp,title=u'測試報告',description=u'用例執行情況',verbosity=2)
 suite=createsuite()
 runner.run(suite)

生成的測試報告 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章