1.implicitly_wait()與time.sleep()之間的區(qū)別
implicitly_wait()表示隱式等待,如果找不到元素會(huì)一直循環(huán)訪問直到時(shí)間用盡
time.sleep()表示顯式等待,固定等待時(shí)間
建議使用implicitly_wait(),如果程序執(zhí)行失敗,再用time.sleep(),這樣會(huì)大大提高程序運(yùn)行速度。但是,有一個(gè)問題是,遇到過下列情況:
(1)點(diǎn)擊IT->網(wǎng)絡(luò)運(yùn)營(yíng)中心
(2)implicitly_wait()
(3)點(diǎn)擊導(dǎo)入排名按鈕。
(4)上傳文件
上傳正確文件時(shí)會(huì)報(bào)錯(cuò),上傳其他文件均不會(huì)報(bào)錯(cuò),顯示找不到導(dǎo)入按鈕元素或該元素不能被點(diǎn)擊,原因暫不清楚。
2.執(zhí)行JavaScript時(shí)報(bào)錯(cuò)找不到元素
先等待網(wǎng)頁(yè)加載完成
windows.onload() {]
//javascript
}
3.firefox瀏覽器下載文件中文亂碼問題
在http報(bào)文的header中可以看到文件下載時(shí),會(huì)先把文件名進(jìn)行編碼再轉(zhuǎn)碼得到,如果該網(wǎng)站用java開發(fā),字符用的不是utf-8就會(huì)出現(xiàn)這樣的問題。chrome和ie不會(huì)對(duì)下載文件進(jìn)行處理,就不會(huì)亂碼。
參考資料:https://www.cnblogs.com/godtrue/p/4333262.html
4.excel文件的基本操作,包括讀寫,比較兩個(gè)文件是否相同
import xlwt,xlrd模塊,將讀出來(lái)的文件存儲(chǔ)為list,python2.X通過cmp(list1,list2)進(jìn)行比較,python3.X通過import operator模塊的operator.eq(list1,list2)。
list操作參考資料:http://www.runoob.com/python/att-list-cmp.html
4.firefox瀏覽器下載文件自動(dòng)化
self.fp=webdriver.FirefoxProfile()
#設(shè)置文件保存路徑
self.fp.set_preference("browser.download.dir","E:\\eclipse-workspace\\RankSystem\\TestData\\")
# 2表示自定義文件夾 0表示保存到桌面
self.fp.set_preference("browser.download.folderList", 2)
#在開始下載時(shí)是否顯示下載管理器
self.fp.set_preference("browser.download.manager.showWhenStarting",False)
#設(shè)置自動(dòng)保存的文件類型,如果firefox不能自動(dòng)保存,一定是文件類型不對(duì)
self.fp.set_preference("browser.helperApps.neverAsk.saveToDisk", "application/vnd.ms-excel")
driver=webdriver.Firefox(firefox_profile=fp)
文件類型參考資料:http://www.w3school.com.cn/media/media_mimeref.asp
5.Python webdriver 定位frameset中的frame
參考資料:http://www.itdecent.cn/writer#/notebooks/18047706/notes/20274252
6.display=none的問題
參考資料:http://www.itdecent.cn/writer#/notebooks/18047706/notes/19838912
7.測(cè)試數(shù)據(jù)的讀入
參考資料:http://www.itdecent.cn/writer#/notebooks/18047706/notes/20467916
8.彈出窗口的處理
如果是瀏覽器自帶的彈出窗口,即元素定位不到的,用switch_to_alert()處理就可以。如果是開發(fā)人員自寫的窗口,用元素定位直接操作即可。
9.同一頁(yè)面進(jìn)行多個(gè)測(cè)試用例
@classmethod
def setUpClass(cls):
pass
@classmethod
def tearDownClass(cls):
pass