前言:自動(dòng)化測(cè)試存在比較多的使用限制,會(huì)存在某段時(shí)間無(wú)法使用的生疏期。通過(guò)這篇文章記錄項(xiàng)目編寫(xiě)程序中遇到的問(wèn)題以及解決思路,希望對(duì)以后的自動(dòng)化開(kāi)發(fā)能有些幫助。
本篇記錄5個(gè)問(wèn)題:
問(wèn)題1:如何激活pycharm
問(wèn)題2. 搭建selenium + unittest開(kāi)發(fā)環(huán)境
問(wèn)題3:顯示等待、隱式等待理解錯(cuò)誤
問(wèn)題4:格式化字符串方法
問(wèn)題5:某一步頁(yè)面無(wú)法響應(yīng),如何保證自動(dòng)化程序能夠繼續(xù)運(yùn)行,不受報(bào)錯(cuò)影響
?
問(wèn)題1:如何激活pycharm:
? ? 網(wǎng)上找的攻略,想在已經(jīng)激活了,但是忘了具體用的是那個(gè)版本的了,以后搭建環(huán)境的時(shí)候,再補(bǔ)充。
? ? 解決方法:找攻略
問(wèn)題2. 搭建selenium + unittest開(kāi)發(fā)環(huán)境:
? ? 解決方法:pycharm--file--setting--Project:Progrem--Project Interpreter
導(dǎo)入selenium包:創(chuàng)建成功后,再列表中會(huì)顯示selenium。這樣操作的只對(duì)你當(dāng)前開(kāi)發(fā)的包可用,每次新創(chuàng)建一個(gè)包,就需要重新引用下。
? ? unittest是python中內(nèi)置的框架,不需要導(dǎo)包,直接在需要使用的文件中,import unittest就可以了。至于unittest框架里有哪些內(nèi)容,如何使用,網(wǎng)上有很多詳細(xì)的說(shuō)明,筆者自己還記得,就不細(xì)說(shuō)了,如果使用中遇到什么問(wèn)題,可以在評(píng)論中討論。筆者看到一定會(huì)給出自己的理解建議。
問(wèn)題3:顯示等待、隱式等待理解錯(cuò)誤:
? ? 解決方法:顯示等待是在定位頁(yè)面某個(gè)元素,這個(gè)元素沒(méi)取到,就等待;取到了,就完成操作進(jìn)入下一步;在配置的等待時(shí)間內(nèi)還沒(méi)渠道,則會(huì)拋出異常。隱式等待,等待的是整個(gè)頁(yè)面完成加載。
顯示等待效率要高于隱式等待。
顯示等待的添加方法:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
el = WebDriverWait(cls.driver, 10).until(EC.presence_of_element_located('class', 'test'))
問(wèn)題4:格式化字符串方法:
? ? ? ? 解決方法:python字符串格式化有兩種:
1.? 使用%? ?例如:?
'//*[@id="instances"]/tbody/tr[%s]/td[2]/b' % count
2. 使用.format? ?例如:
"{Key}:{url} 環(huán)境未啟動(dòng)".format(Key = Key, url = Value[0])
format方法可以通過(guò)位數(shù)來(lái)定位、也可以通過(guò)代碼值進(jìn)行對(duì)應(yīng) 例如:print("{0:2d}{1:.3f}{site}".format(200, 3.1415, site = "gg"))
也可以直接進(jìn)行轉(zhuǎn)化: !a? 轉(zhuǎn)化為:ascii? ? ? !s 轉(zhuǎn)化為:str? ? ?!r? ?轉(zhuǎn)化為:repr
問(wèn)題5:某一步頁(yè)面無(wú)法響應(yīng),如何保證自動(dòng)化程序能夠繼續(xù)運(yùn)行,不受報(bào)錯(cuò)影響
? ? ? ? 解決方法:引入異常處理:try? ? ?except? ? ?else? ? ?finally
1. 首先需要知道哪一步操作會(huì)出現(xiàn)error。 將這一步寫(xiě)入到try中
2. 然后確認(rèn)error內(nèi)容。except? 中記錄這個(gè)error類(lèi)型、同時(shí)需要在文件中引入error類(lèi)型
3. 最后進(jìn)行異常處理。出現(xiàn)異常之后系統(tǒng)進(jìn)行什么操作,保證能夠繼續(xù)運(yùn)行。可以是數(shù)據(jù)處理或者下一步操作等
from selenium.common.exceptions import InvalidArgumentException # 運(yùn)入報(bào)錯(cuò)error類(lèi)型 try: # 將可能發(fā)生錯(cuò)誤內(nèi)容,寫(xiě)入try中 uihandle.get(Value[0]) sleep(2) # 獲取登陸頁(yè)面的Title信息 Server_Title = driver.title # 獲取的Title與config中的title比較,如果不同,則說(shuō)明頁(yè)面沒(méi)啟動(dòng) if Server_Title == Value[1]: # print("{Key}:{url} 已經(jīng)啟動(dòng)".format(Key = Key, url = Value[0])) self.TestReport['Total_Success'] += 1 else: print('*' * 50) print("{Key}:{url} 環(huán)境未啟動(dòng)".format(Key=Key, url=Value[0])) self.TestReport['Total_Failures'] += 1 self.TestReport["Error_Report"].append("""{Key}:{url} 該地址未完成啟動(dòng) """.format(Key=Key, url=Value[0])) except InvalidArgumentException: # 填寫(xiě)error類(lèi)型,系統(tǒng)捕捉到錯(cuò)誤后不再停止,而是執(zhí)行except中的程序 self.TestReport["Error_Report"].append("""{Key}:{url} 該地址無(wú)法訪問(wèn) """.format(Key=Key, url=Value[0])) self.TestReport['Total_Failures'] += 1 finally: # 執(zhí)行完try、except后,最后兩者都需要執(zhí)行的內(nèi)容,寫(xiě)入finally driver.quit()
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
