UI自动化+web测试基础3-2,京东流程
生活随笔
收集整理的這篇文章主要介紹了
UI自动化+web测试基础3-2,京东流程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天上午做了一個京東的一個項目的總體流程,僅供參考,,,沒有斷言的用例就是完美的用例
主要:就是首頁中搜索商品,然后點擊商品,然后將商品加入購物車,加入購物車后點擊去購物車結算,去結算
封裝類,自己定義包名,方法名我定義的是firefox.py
firefox.py
#-*- coding:utf-8 -*- # 倒包 from selenium import webdriver# 導入休眠包 import time# 導入枚舉包 from enum import Enum# 倒包 from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By# 定義類繼承單元測試 class FireFox(object):# 打開瀏覽器 def firefox_start(self,url):# 打開瀏覽器 self.driver = webdriver.Firefox()# 設置最大化 self.driver.maximize_window()# 大愛指定網站 self.driver.get(url)# 設置休眠 self.TimeSleep(ENUMS.FIVE_TIME)pass # 關閉瀏覽器 def firefox_close(self):# 關閉 self.driver.quit()pass # 靜態休眠 def TimeSleep(self,number):time.sleep(number)pass # 隱士休眠 def TimeImplay(self,number):self.driver.implicitly_wait(number)pass # 查找控件方式 8 種 def FindID(self,ID):# 使用顯示休眠,一共休眠20秒,每隔0.5秒休眠一次, ids = (By.ID,ID)# 休眠 WebDriverWait(self.driver,ENUMS.TWENTY_TIME,ENUMS.ONE_HALF).until(EC.presence_of_element_located(ids))return self.driver.find_element_by_id(ID)# 根據id設置點擊事件 def ClickID(self,ID):self.FindID(ID).click()# 輸入內容 def SendkeysID(self,ID,message):self.FindID(ID).send_keys(message)# 查找控件方式 8 種 def FindName(self, name):# 使用顯示休眠,一共休眠20秒,每隔0.5秒休眠一次, names = (By.NAME, name)# 休眠 WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(names))return self.driver.find_element_by_name(name)# 根據id設置點擊事件 def ClickName(self, name):self.FindName(name).click()# 輸入內容 def SendkeysName(self, name, message):self.FindName(name).send_keys(message)# 查找控件方式 8 種 def FindClass(self, cls):# 使用顯示休眠,一共休眠20秒,每隔0.5秒休眠一次, clss = (By.CLASS_NAME, cls)# 休眠 WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(clss))return self.driver.find_element_by_class_name(cls)# 根據id設置點擊事件 def ClickClass(self, cls):self.FindClass(cls).click()# 輸入內容 def SendkeysClass(self, cls, message):self.FindClass(cls).send_keys(message)# 查找控件方式 8 種 def FindXpath(self, xpath):# 使用顯示休眠,一共休眠20秒,每隔0.5秒休眠一次, xpaths = (By.XPATH, xpath)# 休眠 WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(xpaths))return self.driver.find_element_by_xpath(xpath)# 查找控件方式 8 種 def FindXpaths(self, xpath):# 使用顯示休眠,一共休眠20秒,每隔0.5秒休眠一次, xpaths = (By.XPATH, xpath)# 休眠 WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(xpaths))return self.driver.find_elements_by_xpath(xpath)# 根據id設置點擊事件 def ClickXpath(self, xpaht):self.FindXpath(xpaht).click()# 輸入內容 def SendkeysXpath(self, xpaht, message):self.FindXpath(xpaht).send_keys(message)# 查找控件方式 8 種 def FindLink(self, link):# 使用顯示休眠,一共休眠20秒,每隔0.5秒休眠一次, links = (By.LINK_TEXT, link)# 休眠 WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(links))return self.driver.find_element_by_link_text(link)# 根據id設置點擊事件 def ClickLink(self, link):self.FindLink(link).click()# 輸入內容 def SendkeysLink(self, linl, message):self.FindLink(linl).send_keys(message)# 查找控件方式 8 種 def FindPaty(self, link):# 使用顯示休眠,一共休眠20秒,每隔0.5秒休眠一次, links = (By.PARTIAL_LINK_TEXT, link)# 休眠 WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(links))return self.driver.find_element_by_partial_link_text(link)# 根據id設置點擊事件 def ClickPart(self, link):self.FindPaty(link).click()# 輸入內容 def SendkeysPart(self, linl, message):self.FindPaty(linl).send_keys(message)# 查找控件方式 8 種 def FindTag(self, tag):# 使用顯示休眠,一共休眠20秒,每隔0.5秒休眠一次, tags = (By.TAG_NAME, tag)# 休眠 WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(tags))return self.driver.find_element_by_tag_name(tag)# 根據id設置點擊事件 def ClickTag(self, tag):self.FindTag(tag).click()# 輸入內容 def SendkeysTag(self, tag, message):self.FindTag(tag).send_keys(message)# 查找控件方式 8 種 def FindCss(self, css):# 使用顯示休眠,一共休眠20秒,每隔0.5秒休眠一次, csses = (By.CSS_SELECTOR, css)# 休眠 WebDriverWait(self.driver, ENUMS.TWENTY_TIME, ENUMS.ONE_HALF).until(EC.presence_of_element_located(csses))return self.driver.find_element_by_css_selector(css)# 根據id設置點擊事件 def ClickCss(self, css):self.FindCss(css).click()# 輸入內容 def SendkeysCss(self, css, message):self.FindCss(css).send_keys(message)# 獲取title def getTitle(self):return self.driver.title# 獲取當前窗口 def getCurrent_Window(self):return self.driver.current_window_handle# 切換窗口的方法 def switch_to_window(self,current):# 獲取所有的窗口 allwindows = self.driver.window_handles# 使用for循環進行切換 for window in allwindows:if window != current:self.driver.switch_to.window(window)# 設置點擊事件,以及切換窗口的封裝 def ClickID_Window(self,ID):# 獲取當前窗口 current_window = self.getCurrent_Window()# 進行點擊 self.ClickID(ID)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設置點擊事件,以及切換窗口的封裝 def ClickName_Window(self, name):# 獲取當前窗口 current_window = self.getCurrent_Window()# 進行點擊 self.ClickName(name)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設置點擊事件,以及切換窗口的封裝 def ClickClass_Window(self, cls):# 獲取當前窗口 current_window = self.getCurrent_Window()# 進行點擊 self.ClickClass(cls)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設置點擊事件,以及切換窗口的封裝 def ClickXpath_Window(self, xpath):# 獲取當前窗口 current_window = self.getCurrent_Window()# 進行點擊 self.ClickXpath(xpath)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設置點擊事件,以及切換窗口的封裝 def ClickTag_Window(self, tag):# 獲取當前窗口 current_window = self.getCurrent_Window()# 進行點擊 self.ClickTag(tag)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設置點擊事件,以及切換窗口的封裝 def ClickCss_Window(self, css):# 獲取當前窗口 current_window = self.getCurrent_Window()# 進行點擊 self.ClickCss(css)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設置點擊事件,以及切換窗口的封裝 def ClickLink_Window(self, link):# 獲取當前窗口 current_window = self.getCurrent_Window()# 進行點擊 self.ClickLink(link)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設置點擊事件,以及切換窗口的封裝 def ClickPart_Window(self, part):# 獲取當前窗口 current_window = self.getCurrent_Window()# 進行點擊 self.ClickPart(part)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 通過js定位當前窗口 def switch_to_view_js_ID(self,ID):# 執行 js arguments[0].scrollIntoView(); self.driver.execute_script("arguments[0].scrollIntoView();",self.FindID(ID))pass # 通過js定位當前窗口 def switch_to_view_js_Name(self, name):# 執行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindName(name))pass # 通過js定位當前窗口 def switch_to_view_js_Class(self, cls):# 執行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindClass(cls))pass # 通過js定位當前窗口 def switch_to_view_js_Xpath(self, xpath):# 執行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindXpath(xpath))pass # 通過js定位當前窗口 def switch_to_view_js_Tag(self, tag):# 執行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindTag(tag))pass # 通過js定位當前窗口 def switch_to_view_js_css(self, css):# 執行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindCss(css))pass # 通過js定位當前窗口 def switch_to_view_js_link(self, link):# 執行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindLink(link))pass # 通過js定位當前窗口 def switch_to_view_js_part(self, part):# 執行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindPaty(part))pass # 切換到frame ID def seitch_to_id_frame(self,ID):# 切換到frame里面 self.driver.switch_to.frame(self.FindID(ID))# 注意 pass沒有任何意義,只是在寫代碼的時候怕報錯,用來占位的 pass # 切換到frame Name def seitch_to_name_frame(self, name):# 切換到frame里面 self.driver.switch_to.frame(self.FindName(name))# 注意 pass沒有任何意義,只是在寫代碼的時候怕報錯,用來占位的 pass # 切換到frame Class def seitch_to_class_frame(self, cls):# 切換到frame里面 self.driver.switch_to.frame(self.FindClass(cls))# 注意 pass沒有任何意義,只是在寫代碼的時候怕報錯,用來占位的 pass # 切換到frame xpath def seitch_to_xpath_frame(self, xpath):# 切換到frame里面 self.driver.switch_to.frame(self.FindXpath(xpath))# 注意 pass沒有任何意義,只是在寫代碼的時候怕報錯,用來占位的 pass # 切換到frame tag def seitch_to_tag_frame(self, tag):# 切換到frame里面 self.driver.switch_to.frame(self.FindTag(tag))# 注意 pass沒有任何意義,只是在寫代碼的時候怕報錯,用來占位的 pass # 切換到frame tag def seitch_to_css_frame(self, css):# 切換到frame里面 self.driver.switch_to.frame(self.FindCss(css))# 注意 pass沒有任何意義,只是在寫代碼的時候怕報錯,用來占位的 pass # 封裝斷言, 查找控件,獲取內容,斷言前后是不是一致 def AssertEquilClass(self,self1,cls,expect):# 查找控件,獲取內容 self.message = self.FindClass(cls).text# 進行斷言 self1.assertEqual(self.message,expect)pass # 通過 title去斷言 def AssertEquilTitle(self,self1,expect):# 設置休眠,在這里使用強制等待 self.TimeSleep(ENUMS.FIVE_TIME)# 查找控件,獲取內容 self.message = self.getTitle()# 進行斷言 self1.assertEqual(self.message,expect)pass # 斷言數量 def AssertEquilCount(self,self1,cls,number):# 查詢一組控件,進行斷言 clses = self.FindClasses(cls)# 進行斷言 self1.assertEqual(len(clses), number)pass # 斷言控件是不是可見 def AssertTrueID(self,self1,ID):# 設置休眠 給網絡請求或者邏輯判斷的加載時間 self.TimeSleep(ENUMS.FIVE_TIME)# 進行斷言 self1.assertTrue(self.FindID(ID).is_displayed())# 通過 class 查詢一組列表的元素 def FindClasses(self,cls):# 查詢cls clss = (By.CLASS_NAME,cls)# 設置休眠,同時檢查元素的存在 WebDriverWait(self.driver,ENUMS.TWENTY_TIME,ENUMS.ONE_HALF).until(EC.presence_of_element_located(clss))# 返回查找控件的數量 return self.driver.find_elements_by_class_name(cls)# 通過指定下標進行點擊的 def ClickClasses(self,cls,index):# 進行點擊 self.FindClasses(cls)[index].click()# 休眠方式有三種 # 1: 強制休眠 強制休眠,當代碼執行到該句代碼的時候,進行休眠,當休眠結束執行接寫來的代碼 # 2: 隱式休眠 隱式休眠,當窗口打開,開始計算休眠時間,這里指定的是瀏覽器的總共休眠時間,如果這里用到1毛,就在總休眠時間里面減去1秒 # 3: 顯示休眠 顯式休眠,可以設置指定的休眠時間,同時可以設置每隔幾秒檢查一次元素右沒有加載,如果加載了,休眠時間就結束了 # 查詢一組切換窗口的方法 def ClickWindowClsses(self,cls,index):# 獲取當前窗口 current = self.driver.current_window_handle# 查詢一組控件,進行點擊 self.ClickClasses(cls,index)# 設置休眠 這里設置休眠的原因是 1: 有的電腦反應慢,點擊完成以后,一會才跳轉,而我們的代碼執行的比較快,所以需要進行休眠一會再獲取所有窗口,不然獲取的窗口只有一個 # 2: 我們點擊完成以后,這里一般有邏輯判斷,需要請求網絡加載數據需要時間,所以需要休眠 # 使用強制休眠 設置休眠時間 self.TimeSleep(ENUMS.FIVE_TIME)# 獲取所有的窗口 all_window = self.switch_to_window(current)# 定義一個枚舉類 class ENUMS(Enum):# 二秒 TWO_TIME = 2 # 五秒 FIVE_TIME = 5 # 10 秒 TEN_TIME = 10 # 20 秒 TWENTY_TIME = 20 # 0.5 秒 ONE_HALF = 0.5 這些封裝只是一些基礎,用到其他的自己封裝 我繼續了:為了方便我又封裝了京東的url urlutil.py #-*-coding:utf-8-*- # 測試環境分類 3種 # 1: 生產環境 2: 預生成環境 3: 測試環境 # 1: 生產環境 : 就是線上環境,給用戶使用的環境就叫做生產環境,一般在這里我們只允許做功能測試,包括手動點擊和跑自動化 # 不允許做性能測試,因為用戶在使用,性能測試會占用我們的帶寬,同時把服務器搞奔潰,所以堅決不允許的,因為生產環境就是企業的命脈 # 帶寬就是我們的網速 比如 1M 2M 20M 100M # 2: 預生產環境: 一般情況下預生產環境用來做性能測試使用,用來給生產環境進行調優,最后把這些調優的技術用到生產環境, # 3: 測試環境: 就是開發用來開發和測試用來測試的,也叫內網環境, # http 請求組成 : 協議頭: http:// + IP(比如127.0.0.1一般這里被域名替代掉,在生產環境)+ 端口號(在正式的網絡環境里面 # 默認端口好是80我們不用去寫他,但是在測試環境一般需要寫端口號比如 8080 ) + 路徑 # 路徑如果是get就拼接參數,如果是post就在body里面請求參數就可以了 # 定義類 類關鍵字 class 函數關節字 def 類實例化的時候執行的方法 __init__ class URL(object): #類實例化的時候執行的方法 #這個就類似于Java里面的構造函數 def _init_(self): pass # 定義類變量 # 在類里面聲明的變量叫做類變量,在函數里面聲明的變量叫做局部變量 # 聲明生產環境的基本地址 JD_SERVELET="" # # 生命預生產環境 # JD_SERVELET = "" # # 聲明測試環境 # JD_SERVELET = "" # 京東登陸 JD_LOGIN="https://passport.jd.com/uc/login?ltype=logout" # 京東主頁 JD_MAIN = "https://www.jd.com"
我們自己定義單元測試類
比如說我們做的是購物的流程,我定義的就是shop.py
shop.py
到這里差不多就可以運行了,賬號密碼用自己的,我就不寫了,shop里面我主要用的是css如果有自己的方法也是可以的僅供參考。
?
總結
以上是生活随笔為你收集整理的UI自动化+web测试基础3-2,京东流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实习日记——Day12
- 下一篇: lonza原代细胞、培养基目录