日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

UI自动化+web测试基础3-2,京东流程

發(fā)布時(shí)間:2024/5/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UI自动化+web测试基础3-2,京东流程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天上午做了一個(gè)京東的一個(gè)項(xiàng)目的總體流程,僅供參考,,,沒有斷言的用例就是完美的用例

主要:就是首頁中搜索商品,然后點(diǎn)擊商品,然后將商品加入購物車,加入購物車后點(diǎn)擊去購物車結(jié)算,去結(jié)算

封裝類,自己定義包名,方法名我定義的是firefox.py

firefox.py

#-*- coding:utf-8 -*- # 倒包 from selenium import webdriver# 導(dǎo)入休眠包 import time# 導(dǎo)入枚舉包 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# 定義類繼承單元測(cè)試 class FireFox(object):# 打開瀏覽器 def firefox_start(self,url):# 打開瀏覽器 self.driver = webdriver.Firefox()# 設(shè)置最大化 self.driver.maximize_window()# 大愛指定網(wǎng)站 self.driver.get(url)# 設(shè)置休眠 self.TimeSleep(ENUMS.FIVE_TIME)pass # 關(guān)閉瀏覽器 def firefox_close(self):# 關(guān)閉 self.driver.quit()pass # 靜態(tài)休眠 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)# 根據(jù)id設(shè)置點(diǎn)擊事件 def ClickID(self,ID):self.FindID(ID).click()# 輸入內(nèi)容 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)# 根據(jù)id設(shè)置點(diǎn)擊事件 def ClickName(self, name):self.FindName(name).click()# 輸入內(nèi)容 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)# 根據(jù)id設(shè)置點(diǎn)擊事件 def ClickClass(self, cls):self.FindClass(cls).click()# 輸入內(nèi)容 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)# 根據(jù)id設(shè)置點(diǎn)擊事件 def ClickXpath(self, xpaht):self.FindXpath(xpaht).click()# 輸入內(nèi)容 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)# 根據(jù)id設(shè)置點(diǎn)擊事件 def ClickLink(self, link):self.FindLink(link).click()# 輸入內(nèi)容 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)# 根據(jù)id設(shè)置點(diǎn)擊事件 def ClickPart(self, link):self.FindPaty(link).click()# 輸入內(nèi)容 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)# 根據(jù)id設(shè)置點(diǎn)擊事件 def ClickTag(self, tag):self.FindTag(tag).click()# 輸入內(nèi)容 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)# 根據(jù)id設(shè)置點(diǎn)擊事件 def ClickCss(self, css):self.FindCss(css).click()# 輸入內(nèi)容 def SendkeysCss(self, css, message):self.FindCss(css).send_keys(message)# 獲取title def getTitle(self):return self.driver.title# 獲取當(dāng)前窗口 def getCurrent_Window(self):return self.driver.current_window_handle# 切換窗口的方法 def switch_to_window(self,current):# 獲取所有的窗口 allwindows = self.driver.window_handles# 使用for循環(huán)進(jìn)行切換 for window in allwindows:if window != current:self.driver.switch_to.window(window)# 設(shè)置點(diǎn)擊事件,以及切換窗口的封裝 def ClickID_Window(self,ID):# 獲取當(dāng)前窗口 current_window = self.getCurrent_Window()# 進(jìn)行點(diǎn)擊 self.ClickID(ID)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設(shè)置點(diǎn)擊事件,以及切換窗口的封裝 def ClickName_Window(self, name):# 獲取當(dāng)前窗口 current_window = self.getCurrent_Window()# 進(jìn)行點(diǎn)擊 self.ClickName(name)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設(shè)置點(diǎn)擊事件,以及切換窗口的封裝 def ClickClass_Window(self, cls):# 獲取當(dāng)前窗口 current_window = self.getCurrent_Window()# 進(jìn)行點(diǎn)擊 self.ClickClass(cls)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設(shè)置點(diǎn)擊事件,以及切換窗口的封裝 def ClickXpath_Window(self, xpath):# 獲取當(dāng)前窗口 current_window = self.getCurrent_Window()# 進(jìn)行點(diǎn)擊 self.ClickXpath(xpath)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設(shè)置點(diǎn)擊事件,以及切換窗口的封裝 def ClickTag_Window(self, tag):# 獲取當(dāng)前窗口 current_window = self.getCurrent_Window()# 進(jìn)行點(diǎn)擊 self.ClickTag(tag)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設(shè)置點(diǎn)擊事件,以及切換窗口的封裝 def ClickCss_Window(self, css):# 獲取當(dāng)前窗口 current_window = self.getCurrent_Window()# 進(jìn)行點(diǎn)擊 self.ClickCss(css)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設(shè)置點(diǎn)擊事件,以及切換窗口的封裝 def ClickLink_Window(self, link):# 獲取當(dāng)前窗口 current_window = self.getCurrent_Window()# 進(jìn)行點(diǎn)擊 self.ClickLink(link)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 設(shè)置點(diǎn)擊事件,以及切換窗口的封裝 def ClickPart_Window(self, part):# 獲取當(dāng)前窗口 current_window = self.getCurrent_Window()# 進(jìn)行點(diǎn)擊 self.ClickPart(part)# 休眠五秒 self.TimeSleep(ENUMS.FIVE_TIME)# 切換窗口 self.switch_to_window(current_window)# 通過js定位當(dāng)前窗口 def switch_to_view_js_ID(self,ID):# 執(zhí)行 js arguments[0].scrollIntoView(); self.driver.execute_script("arguments[0].scrollIntoView();",self.FindID(ID))pass # 通過js定位當(dāng)前窗口 def switch_to_view_js_Name(self, name):# 執(zhí)行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindName(name))pass # 通過js定位當(dāng)前窗口 def switch_to_view_js_Class(self, cls):# 執(zhí)行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindClass(cls))pass # 通過js定位當(dāng)前窗口 def switch_to_view_js_Xpath(self, xpath):# 執(zhí)行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindXpath(xpath))pass # 通過js定位當(dāng)前窗口 def switch_to_view_js_Tag(self, tag):# 執(zhí)行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindTag(tag))pass # 通過js定位當(dāng)前窗口 def switch_to_view_js_css(self, css):# 執(zhí)行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindCss(css))pass # 通過js定位當(dāng)前窗口 def switch_to_view_js_link(self, link):# 執(zhí)行 js self.driver.execute_script("arguments[0].scrollIntoView();", self.FindLink(link))pass # 通過js定位當(dāng)前窗口 def switch_to_view_js_part(self, part):# 執(zhí)行 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沒有任何意義,只是在寫代碼的時(shí)候怕報(bào)錯(cuò),用來占位的 pass # 切換到frame Name def seitch_to_name_frame(self, name):# 切換到frame里面 self.driver.switch_to.frame(self.FindName(name))# 注意 pass沒有任何意義,只是在寫代碼的時(shí)候怕報(bào)錯(cuò),用來占位的 pass # 切換到frame Class def seitch_to_class_frame(self, cls):# 切換到frame里面 self.driver.switch_to.frame(self.FindClass(cls))# 注意 pass沒有任何意義,只是在寫代碼的時(shí)候怕報(bào)錯(cuò),用來占位的 pass # 切換到frame xpath def seitch_to_xpath_frame(self, xpath):# 切換到frame里面 self.driver.switch_to.frame(self.FindXpath(xpath))# 注意 pass沒有任何意義,只是在寫代碼的時(shí)候怕報(bào)錯(cuò),用來占位的 pass # 切換到frame tag def seitch_to_tag_frame(self, tag):# 切換到frame里面 self.driver.switch_to.frame(self.FindTag(tag))# 注意 pass沒有任何意義,只是在寫代碼的時(shí)候怕報(bào)錯(cuò),用來占位的 pass # 切換到frame tag def seitch_to_css_frame(self, css):# 切換到frame里面 self.driver.switch_to.frame(self.FindCss(css))# 注意 pass沒有任何意義,只是在寫代碼的時(shí)候怕報(bào)錯(cuò),用來占位的 pass # 封裝斷言, 查找控件,獲取內(nèi)容,斷言前后是不是一致 def AssertEquilClass(self,self1,cls,expect):# 查找控件,獲取內(nèi)容 self.message = self.FindClass(cls).text# 進(jìn)行斷言 self1.assertEqual(self.message,expect)pass # 通過 title去斷言 def AssertEquilTitle(self,self1,expect):# 設(shè)置休眠,在這里使用強(qiáng)制等待 self.TimeSleep(ENUMS.FIVE_TIME)# 查找控件,獲取內(nèi)容 self.message = self.getTitle()# 進(jìn)行斷言 self1.assertEqual(self.message,expect)pass # 斷言數(shù)量 def AssertEquilCount(self,self1,cls,number):# 查詢一組控件,進(jìn)行斷言 clses = self.FindClasses(cls)# 進(jìn)行斷言 self1.assertEqual(len(clses), number)pass # 斷言控件是不是可見 def AssertTrueID(self,self1,ID):# 設(shè)置休眠 給網(wǎng)絡(luò)請(qǐng)求或者邏輯判斷的加載時(shí)間 self.TimeSleep(ENUMS.FIVE_TIME)# 進(jìn)行斷言 self1.assertTrue(self.FindID(ID).is_displayed())# 通過 class 查詢一組列表的元素 def FindClasses(self,cls):# 查詢cls clss = (By.CLASS_NAME,cls)# 設(shè)置休眠,同時(shí)檢查元素的存在 WebDriverWait(self.driver,ENUMS.TWENTY_TIME,ENUMS.ONE_HALF).until(EC.presence_of_element_located(clss))# 返回查找控件的數(shù)量 return self.driver.find_elements_by_class_name(cls)# 通過指定下標(biāo)進(jìn)行點(diǎn)擊的 def ClickClasses(self,cls,index):# 進(jìn)行點(diǎn)擊 self.FindClasses(cls)[index].click()# 休眠方式有三種 # 1: 強(qiáng)制休眠 強(qiáng)制休眠,當(dāng)代碼執(zhí)行到該句代碼的時(shí)候,進(jìn)行休眠,當(dāng)休眠結(jié)束執(zhí)行接寫來的代碼 # 2: 隱式休眠 隱式休眠,當(dāng)窗口打開,開始計(jì)算休眠時(shí)間,這里指定的是瀏覽器的總共休眠時(shí)間,如果這里用到1毛,就在總休眠時(shí)間里面減去1秒 # 3: 顯示休眠 顯式休眠,可以設(shè)置指定的休眠時(shí)間,同時(shí)可以設(shè)置每隔幾秒檢查一次元素右沒有加載,如果加載了,休眠時(shí)間就結(jié)束了 # 查詢一組切換窗口的方法 def ClickWindowClsses(self,cls,index):# 獲取當(dāng)前窗口 current = self.driver.current_window_handle# 查詢一組控件,進(jìn)行點(diǎn)擊 self.ClickClasses(cls,index)# 設(shè)置休眠 這里設(shè)置休眠的原因是 1: 有的電腦反應(yīng)慢,點(diǎn)擊完成以后,一會(huì)才跳轉(zhuǎn),而我們的代碼執(zhí)行的比較快,所以需要進(jìn)行休眠一會(huì)再獲取所有窗口,不然獲取的窗口只有一個(gè) # 2: 我們點(diǎn)擊完成以后,這里一般有邏輯判斷,需要請(qǐng)求網(wǎng)絡(luò)加載數(shù)據(jù)需要時(shí)間,所以需要休眠 # 使用強(qiáng)制休眠 設(shè)置休眠時(shí)間 self.TimeSleep(ENUMS.FIVE_TIME)# 獲取所有的窗口 all_window = self.switch_to_window(current)# 定義一個(gè)枚舉類 class ENUMS(Enum):# 二秒 TWO_TIME = 2 # 五秒 FIVE_TIME = 5 # 10 秒 TEN_TIME = 10 # 20 秒 TWENTY_TIME = 20 # 0.5 秒 ONE_HALF = 0.5

這些封裝只是一些基礎(chǔ),用到其他的自己封裝 我繼續(xù)了:為了方便我又封裝了京東的url urlutil.py #-*-coding:utf-8-*- # 測(cè)試環(huán)境分類 3種 # 1: 生產(chǎn)環(huán)境 2: 預(yù)生成環(huán)境 3: 測(cè)試環(huán)境 # 1: 生產(chǎn)環(huán)境 : 就是線上環(huán)境,給用戶使用的環(huán)境就叫做生產(chǎn)環(huán)境,一般在這里我們只允許做功能測(cè)試,包括手動(dòng)點(diǎn)擊和跑自動(dòng)化 # 不允許做性能測(cè)試,因?yàn)橛脩粼谑褂?性能測(cè)試會(huì)占用我們的帶寬,同時(shí)把服務(wù)器搞奔潰,所以堅(jiān)決不允許的,因?yàn)樯a(chǎn)環(huán)境就是企業(yè)的命脈 # 帶寬就是我們的網(wǎng)速 比如 1M 2M 20M 100M # 2: 預(yù)生產(chǎn)環(huán)境: 一般情況下預(yù)生產(chǎn)環(huán)境用來做性能測(cè)試使用,用來給生產(chǎn)環(huán)境進(jìn)行調(diào)優(yōu),最后把這些調(diào)優(yōu)的技術(shù)用到生產(chǎn)環(huán)境, # 3: 測(cè)試環(huán)境: 就是開發(fā)用來開發(fā)和測(cè)試用來測(cè)試的,也叫內(nèi)網(wǎng)環(huán)境, # http 請(qǐng)求組成 : 協(xié)議頭: http:// + IP(比如127.0.0.1一般這里被域名替代掉,在生產(chǎn)環(huán)境)+ 端口號(hào)(在正式的網(wǎng)絡(luò)環(huán)境里面 # 默認(rèn)端口好是80我們不用去寫他,但是在測(cè)試環(huán)境一般需要寫端口號(hào)比如 8080 ) + 路徑 # 路徑如果是get就拼接參數(shù),如果是post就在body里面請(qǐng)求參數(shù)就可以了 # 定義類 類關(guān)鍵字 class 函數(shù)關(guān)節(jié)字 def 類實(shí)例化的時(shí)候執(zhí)行的方法 __init__ class URL(object): #類實(shí)例化的時(shí)候執(zhí)行的方法 #這個(gè)就類似于Java里面的構(gòu)造函數(shù) def _init_(self): pass # 定義類變量 # 在類里面聲明的變量叫做類變量,在函數(shù)里面聲明的變量叫做局部變量 # 聲明生產(chǎn)環(huán)境的基本地址 JD_SERVELET="" # # 生命預(yù)生產(chǎn)環(huán)境 # JD_SERVELET = "" # # 聲明測(cè)試環(huán)境 # JD_SERVELET = "" # 京東登陸 JD_LOGIN="https://passport.jd.com/uc/login?ltype=logout" # 京東主頁 JD_MAIN = "https://www.jd.com"


我們自己定義單元測(cè)試類
比如說我們做的是購物的流程,我定義的就是shop.py
shop.py

# -*- coding:utf-8 -*- # 導(dǎo)入單元測(cè)試 import unittest # 導(dǎo)入工具類 from util import firefoxutil, urlutil # 聲明類 繼承單元測(cè)試 class Shop(unittest.TestCase): # 實(shí)例化對(duì)象的方法 @classmethod def setUpClass(self): # 實(shí)例化工具類 self.firefox = firefoxutil.FireFox() # 實(shí)例化 url self.URL = urlutil.URL() pass # 打開瀏覽器 def setUp(self): # 打開京東主頁 self.firefox.firefox_start(self.URL.JD_MAIN) pass # 關(guān)閉瀏覽器 def tearDown(self): # 關(guān)閉瀏覽器 # self.firefox.firefox_close() pass # 購物的測(cè)試用例 def test_shop(self): # 輸入襪子 self.firefox.SendkeysID("key", u"襪子") # 點(diǎn)擊查找按鈕 self.firefox.ClickClass("button") # 使用js定位 self.firefox.switch_to_view_js_Class("m-list") #打印長度 獲取item列表 #理論上在這里我們應(yīng)該鏈接數(shù)據(jù)庫去查詢列表,看看和頁面展示的是不是一致,或者請(qǐng)求接口,看看接口 #返回的數(shù)據(jù)和頁面是不是一致 # 點(diǎn)擊搜索按鈕,需要加載網(wǎng)絡(luò),所以需要時(shí)間,可能會(huì)造成斷言錯(cuò)誤,,所以我們需要使用強(qiáng)制休眠,給網(wǎng)絡(luò)加載數(shù)據(jù)提供時(shí)間 # self.firefox.TimeSleep(firefoxutil.ENUMS.FIVE_TIME) # #進(jìn)行斷言數(shù)量 # self.firefox.AssertEquilCount(self,"p-img",49) # 面試題 : 動(dòng)態(tài)元素如何進(jìn)行定位? # 首先動(dòng)態(tài)元素一般是列表類型,一般通過查詢一組元素來返回一個(gè)列表,再通過列表的下標(biāo)進(jìn)行點(diǎn)擊事件 # 通過xpath獲取第一個(gè)的內(nèi)容 ems=self.firefox.FindXpaths("//div[@class='gl-i-wrap']/div[4]/a/em")[0].text #打印內(nèi)容 print ems # 查詢一組元素,同時(shí)點(diǎn)擊指定坐標(biāo) self.firefox.ClickWindowClsses("p-img",0) # 使用斷言 self.firefox.AssertEquilTitle(self,ems+u"【圖片 價(jià)格 品牌 報(bào)價(jià)】-京東") # 進(jìn)行定位 通過class self.firefox.switch_to_view_js_Class("crumb-wrap") # 通過 css,查找元素進(jìn)行定位 點(diǎn)擊加入購物車按鈕 self.firefox.ClickCss("a#InitCartUrl") #進(jìn)行斷言 self.firefox.AssertEquilTitle(self, u"商品已成功加入購物車") # 通過css點(diǎn)擊 到購物車結(jié)算按鈕 self.firefox.ClickCss("a#GotoShoppingCart") # 進(jìn)行斷言 self.firefox.AssertEquilTitle(self, u"我的購物車 - 京東商城") # 點(diǎn)擊 去結(jié)算按鈕 通過 css進(jìn)行點(diǎn)擊 self.firefox.ClickCss("a.submit-btn") # 點(diǎn)擊完成提交按鈕以后,斷言 frame是不是可見,如果可見,說明符合我們的預(yù)期,用例通過 self.firefox.AssertTrueID(self,"dialogIframe") # 切換 frame 進(jìn)行登陸 self.firefox.seitch_to_id_frame("dialogIframe") self.firefox.ClickClass("login-tab-r") self.firefox.SendkeysID("loginname", "18010030176") self.firefox.SendkeysID("nloginpwd", "dong512@al") # 點(diǎn)擊登陸 self.firefox.ClickID("loginsubmit") self.firefox.TimeSleep(firefoxutil.ENUMS.FIVE_TIME) self.firefox.AssertEquilTitle(self, u"訂單結(jié)算頁 -京東商城") self.firefox.ClickCss("a.order-submit") self.firefox.AssertEquilTitle(self, u"") 生成測(cè)試報(bào)告的包suit.py suit.py #-*- coding:utf-8 -*- # 導(dǎo)入單元測(cè)試 import unittest # 導(dǎo)入單元測(cè)試 from unit import login,shop # 導(dǎo)入自動(dòng)化測(cè)試報(bào)告 import HTMLTestRunner # 導(dǎo)入os包 import os # 設(shè)置系統(tǒng)編碼格式 # 導(dǎo)入sys import sys # 重新加載 reload(sys) # 設(shè)置編碼格式 sys.setdefaultencoding("UTF-8") # 注意如果設(shè)置以上三句代碼,報(bào)告有可能還亂碼,咱們還需要設(shè)置自動(dòng)化測(cè)試報(bào)告里面的編碼格式 # 實(shí)例化套件 suit = unittest.TestSuite() # 將單元測(cè)試加入到套件里面 # suit.addTest(unittest.makeSuite(login.Login)) suit.addTest(unittest.makeSuite(shop.Shop)) # 指定自動(dòng)化測(cè)試報(bào)告的路徑 files = os.getcwd() + "/jd.html" # 設(shè)置讀寫方式 wb 以二進(jìn)制的方式進(jìn)行寫 rb 以二進(jìn)制的方式進(jìn)行讀取 rb+ 以二進(jìn)制的方式既可以讀又可以寫 filename = open(files,'wb') # 運(yùn)行自動(dòng)化測(cè)試報(bào)告 runner = HTMLTestRunner.HTMLTestRunner(stream=filename,title=u"京東",description=u"京東登陸測(cè)試用例") # 運(yùn)行 runner.run(suit)


到這里差不多就可以運(yùn)行了,賬號(hào)密碼用自己的,我就不寫了,shop里面我主要用的是css如果有自己的方法也是可以的僅供參考。


?

總結(jié)

以上是生活随笔為你收集整理的UI自动化+web测试基础3-2,京东流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。