qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          selenium-webdriver(python) (十六) --unittest 框架


          學習unittest 很好的一個切入點就是從selenium IDE 錄制導出腳本。相信不少新手學習selenium 也是從IED 開始的。

          IDE學習參考:

          菜鳥學自動化測試(一)----selenium IDE

           

          借助IED 錄制腳本

           

          將腳本導出,保存為baidu.py ,通過python IDLE編輯器打開。如下:

          復制代碼
          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
          import unittest, time, re
          
          class Baidu(unittest.TestCase):
              def setUp(self):
                  self.driver = webdriver.Firefox()
                  self.driver.implicitly_wait(30)
                  self.base_url = "http://www.baidu.com/"
                  self.verificationErrors = []
                  self.accept_next_alert = True
              
              def test_baidu(self):
                  driver = self.driver
                  driver.get(self.base_url + "/")
                  driver.find_element_by_id("kw").send_keys("selenium webdriver")
                  driver.find_element_by_id("su").click()
                  driver.close()
          
              def is_element_present(self, how, what):
                  try: self.driver.find_element(by=how, value=what)
                  except NoSuchElementException, e: return False
                  return True
          
              def is_alert_present(self):
                  try: self.driver.switch_to_alert()
                  except NoAlertPresentException, e: return False
                  return True
              
              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()
          復制代碼

          加入unittest框架后,看上去比我們之前見的腳本復雜了很多,除了中間操作瀏覽器的幾行,其它都看不懂,不要急,我們來分析一下~

           

           

          框架分析           

           

           

          import  unittest  

          相想使用unittest框架,首先要引入unittest 包,這個不多解釋。

           

          class Baidu(unittest.TestCase):

          Baidu類繼承unittest.TestCase 類,從TestCase類繼承是告訴unittest模塊的方式,這是一個測試案例

           

          def setUp(self):
            self.driver = webdriver.Firefox()
            self.base_url = "http://www.baidu.com/"

          setUp 用于設置初始化的部分,在測試用例執(zhí)行前,這個方法中的函數(shù)將先被調(diào)用。這里將瀏覽器的調(diào)用和URL的訪問放到初始化部分。

           

          self.verificationErrors = []

          腳本運行時,錯誤的信息將被打印到這個列表中。

           

          self.accept_next_alert = True

          是否繼續(xù)接受下一下警告(字面意思,沒找到解釋!)

           

           def test_baidu(self):
                  driver = self.driver
                  driver.get(self.base_url + "/")
                  driver.find_element_by_id("kw").send_keys("selenium webdriver")
                  driver.find_element_by_id("su").click()

           test_baidu中放置的就是我們的測試腳本了,這部分我們并不陌生;因為我們執(zhí)行的腳本就在這里。

           

           

          def is_element_present(self, how, what):
                  try: self.driver.find_element(by=how, value=what)
                  except NoSuchElementException, e: return False
                  return True

           is_element_present函數(shù)用來查找頁面元素是否存在,在這里用處不大,通常刪除。

          因為判斷頁面元素是否存在一般都加在testcase中。

           

           

          def is_alert_present(self):
                  try: self.driver.switch_to_alert()
                  except NoAlertPresentException, e: return False
                  return True

          對彈窗異常的處理

           

          復制代碼
          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
          復制代碼

          關閉警告和對得到文本框的處理,如果不熟悉python的異常處理和if 語句的話,請去補基礎知識,這里不多解釋。

           

          def tearDown(self):
                  self.driver.quit()
                  self.assertEqual([], self.verificationErrors)

            tearDown 方法在每個測試方法執(zhí)行后調(diào)用,這個地方做所有清理工作,如退出瀏覽器等。 

            self.assertEqual([], self.verificationErrors) 是個難點,對前面verificationErrors方法獲得的列表進行比較;如查verificationErrors的列表不為空

          輸出列表中的報錯信息。

            而且,這個東西,也可以將來被你自己更好的調(diào)用和使用,根據(jù)自己的需要寫入你希望的信息。(rabbit 告訴我的

           

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

          unitest.main()函數(shù)用來測試 類中以test開頭的測試用例

           

           

           

          執(zhí)行結果      

           

            這樣一一分析下來,我們對unittest 框架有了初步的了解。運行腳本,因為引入了unittest 框架,所以控制臺輸出了腳本執(zhí)行情況的信息。

           

          復制代碼
          >>> ========================= RESTART ================================
          >>> 
          .
          ----------------------------------------------------------------------
          Ran 1 test in 10.656s
          
          OK
          >>> 
          復制代碼

           

          很帥吧!? 后面將以unittest 為基礎,向新的征程進發(fā)~

           

           

           

           

          posted on 2014-04-03 11:39 順其自然EVO 閱讀(505) 評論(0)  編輯  收藏 所屬分類: 自動化測試python

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 谢通门县| 泸溪县| 西盟| 长沙市| 桐乡市| 治多县| 郑州市| 镇远县| 赤峰市| 金昌市| 鸡西市| 原阳县| 和顺县| 辰溪县| 华蓥市| 闻喜县| 峨山| 怀安县| 静海县| 沙河市| 历史| 兰坪| 夹江县| 图们市| 兴城市| 栾城县| 阳春市| 穆棱市| 大港区| 张家界市| 上饶县| 阿勒泰市| 宁南县| 博野县| 蓬莱市| 资源县| 寻甸| 金门县| 罗田县| 彭州市| 黄骅市|