前言:自動化測試存在比較多的使用限制,會存在某段時間無法使用的生疏期。通過這篇文章記錄項目編寫程序中遇到的問題以及解決思路,希望對以后的自動化開發(fā)能有些幫助。
本篇記錄5個問題:
問題6:獲取列表中,整行整列數(shù)據(jù)的方法
問題7:數(shù)據(jù)無法獲取眾多原因之一:列表中同一位置元素,html格式不同。
問題8:for循環(huán)與try使用錯誤
問題9:確認(rèn)網(wǎng)頁是否打開的方法之一:使用title
問題10:selenium操作下拉選項內(nèi)容
?
問題6:獲取列表中,整合整理額數(shù)據(jù)的方法:
? ? ? ? 操作網(wǎng)頁中,經(jīng)常會出現(xiàn)列表,如果使用selenium獲取一個列表的所有數(shù)據(jù)。目前可行的方法核心是For循環(huán)+Xpath路徑。
1.? 獲取整個表單tbody的xpath路徑:list = driver.find_element_by_xpath("http://*[@id="***"]/tbody")
2. 獲取有效數(shù)據(jù)第一行,第一列的數(shù)據(jù): test_click = list.driver.find_element_by_xpath("http://*[@id="***"]/tbody/tr[1]/td[1]/b")。這一步實際上可以不應(yīng)用list,引用list能夠?qū)⒎秶s小到特定的列表。如果頁面只有一個列表,則不需要獲取list
3. 獲取有效數(shù)據(jù)第二行,第一列的數(shù)據(jù):test_click2 =?list.driver.find_element_by_xpath("http://*[@id="***"]/tbody/tr[2]/td[1]/b")
4. 獲取有效數(shù)據(jù)第一行,第二列的數(shù)據(jù):test_click3 = list.driver.find_element_by_xpath("http://*[@id="***"]/tbody/tr[1]/td[2]/b")
按照規(guī)律,如果想要獲取某個特定列的數(shù)據(jù)則:
test_list = []
for?i?in range(1,最大列個數(shù)):
? ? test_list.append(list.driver.find_element_by_xpath("http://*[@id="***"]/tbody/tr[{}]/td[1]/b".format(i)))
取特定行也類似。
?
問題7:數(shù)據(jù)無法獲取眾多原因之一:列表中同一位置元素,html格式不同。
? ? ? ?html頁面中部分字段由于顯示內(nèi)容不同,html中的名稱內(nèi)容也不同。selenium如果不做處理,就會導(dǎo)致程序運行到某一步因找不到元素而報錯。NoSuchElementException。處理這種問題,常用 異常處理【 try,except,else,final】
? ? ? ?
try: //某個字段可能由于內(nèi)容不同導(dǎo)致html格式不同,無法使用同一個xpath獲取到 Status = table.find_element_by_xpath('//*[@id="instances"]/tbody/tr[%s]/td[4]/b'%count).text except NoSuchElementException: //取不到字段的時候,就開始運行另一種形式 Status = table.find_element_by_xpath('//*[@id="instances"]/tbody/tr[%s]/td[4]/font/b/b' % count) count_parren = table.find_element_by_xpath('//*[@id="instances"]/tbody/tr[%s]/td[4]/'% count).text count = re.search('\(\d\)', count_parren).group() final: driver.quit() //最后退出瀏覽器
問題8:for循環(huán)與try使用錯誤
? ? ? ? 主要是對try使用方法的不理解,導(dǎo)致的問題。
? ? ? ? try:當(dāng)執(zhí)行其中的方法出現(xiàn)錯誤后,就會直接跳出try中的代碼。相當(dāng)于發(fā)現(xiàn)報錯,就執(zhí)行了break。所以當(dāng)try中寫入了for循環(huán)后,任何一次執(zhí)行內(nèi)容出現(xiàn)了異常,都會跳出整個for循環(huán)。
? ? ? ? 解決方法也很簡單,值需要將try寫到for循環(huán)中。
for count in range(1,len(Application_List)+1): try: Applation = table.find_element_by_xpath('//*[@id="instances"]/tbody/tr[%s]/td[1]/b'%count).text except NoSuchElementException: break
問題9:確認(rèn)網(wǎng)頁是否打開的方法之一:使用title
? ? ? ? 有個自動化需求的描述是,訪問地址判斷服務(wù)是否啟動。接到需求的時候,考慮捕捉該網(wǎng)址特定的字段,能夠捕捉到就算啟動了。這種方案的問題在于,每個頁面的內(nèi)容不一致,每個都需要寫,很要命。所以就想有沒有一個所有頁面都使用但是內(nèi)容還各不相同的用于區(qū)別頁面以及驗證是否啟動。這個時候就先到了,Title
? ? ? ? selenium中也有取title的方法:driver.title
? ? ? ? 開發(fā)內(nèi)容就分為了兩步:第一步,根據(jù)提供的地址獲取title,寫入配置文件中。
第一步,只是取title的過程用自動化執(zhí)行了,然后打印出title,復(fù)制粘貼到excel里。當(dāng)然也可以直接寫入excle,就是比較麻煩,一次性完成的內(nèi)容,還是手動操作能快些。
第二部,實際測試的時候,取title與配置文件中的比較。
for Key, Value in URL_Dict.items(): # 驗證內(nèi)容正確性 driver = browser_config['chrome']() uihandle = UIHandle(driver) try: uihandle.get(Value[0]) sleep(2) # 獲取登陸頁面的Title信息 Server_Title = driver.title # 獲取的Title與config中的title比較,如果不同,則說明頁面沒啟動 if Server_Title == Value[1]: # print("{Key}:{url} 已經(jīng)啟動".format(Key = Key, url = Value[0])) self.TestReport['Total_Success'] += 1 else: print('*'* 50) print("{Key}:{url} 環(huán)境未啟動".format(Key = Key, url = Value[0])) self.TestReport['Total_Failures'] += 1 self.TestReport["Error_Report"].append("""{Key}:{url} 該地址未完成啟動 """.format(Key=Key, url=Value[0])) except InvalidArgumentException: self.TestReport["Error_Report"].append("""{Key}:{url} 該地址無法訪問 """.format(Key = Key, url = Value[0])) self.TestReport['Total_Failures'] += 1 finally: driver.quit()
問題10:selenium操作下拉選項內(nèi)容
? ? ? ? UI自動化經(jīng)常會需要點擊一些下拉選項。目前可行的方法是,先獲取控件位置以及選項位置。然后先點擊控件再點擊選項。就能夠完成選項選擇
uihandle.Click("前端", '性別選型') uihandle.Click("前端", '男')
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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