py+selenium 自動判斷頁面是否報錯並顯示在自動化測試報告【原創】

怪盜積德發表於2019-07-19

  有需求就會去研究解決的路子。

  現在需求就是,測試報告報錯資訊一堆,但卻無法肉眼看出是什麼問題,你只能知道定位不到元素或是超時,但你卻不知道其實進入頁面就報錯了或是提交表單就報錯了!也就是看到報錯,需要進一步去手工實際操作看看到底為啥定位不到元素或是為啥超時了。

  這就是平常比較抓頭的測試報告圖。

 

 

  最近我就想寫個方法,判斷頁面報錯,顯示在測試報告裡,減少手工的檢驗,其實也很簡單。

 

# 測試進入頁面是否報錯
def httpcode(self, link):

    self.driver.switch_to.parent_frame()
    self.driver.switch_to.frame("fraLeftFrame")

    # 拼接當前訪問的url
    # href = self.driver.find_element_by_link_text(link).get_attribute('href')
    href = self.driver.find_element_by_xpath("//a[text()='%s']" % link).get_attribute('href')
    href = re.findall("(\/.*)\"\)", href)
    ipport = re.findall("(http://.*)\/", self.driver.current_url)
    url = ipport[0] + href[0]

    cookies = {"JSESSIONID": self.driver.get_cookies()[0]['value'], "jforumSSOCookieNameUser": "xxxx"}

    res = requests.get(url, cookies=cookies, stream=True)

    # 判斷是否響應200
    if res.status_code != 200:

        print("********** http請求錯誤,頁面報錯 **********\n"
              "(訪問", url, "頁面報錯", res.status_code, ")\n")
        raise urllib.error.HTTPError()
    else:
        print("**********  http請求響應200  **********")

    self.driver.switch_to.parent_frame()
    self.driver.switch_to.frame("fraRightFrame")

 

  無視方法裡前後的進入frame哈,由於頁面需要登入,所以我需要獲取當前cookie加入到request裡,這個根據你自己的系統實際需求設計。

  其實主要的思路就是,訪問頁面時,用request請求對應頁面(因為無直接連結,所以上面的程式碼是拼接出頁面的連結),根據響應是否為200來判斷頁面是否報錯,如果非200,那就丟擲異常

 

  而呼叫時,則是放在顯示等待前面,這樣頁面報錯,就不用去跑30秒等待著元素了,報錯反而更快的退出進入下一條用例。

 

 

  上面是頁面訪問報錯的問題處理,而下面我又寫了個,提交表單報錯的處理,更簡單。

  僅提供思路,不一定適用所有系統。

  因為目標系統提交報錯跳轉的報錯頁面,都是同個頁面,那麼就可以通過定位報錯頁面裡面的某個元素來判斷,如果發現元素存在則丟擲異常,不存在則繼續。

 

 

   雖說上面兩種方法,不能將所有報錯可能都判斷出來,但也至少判斷了7成,大大的減少人工檢驗。

 

現在的報告是這樣:

 

 

 

如有錯誤,請及時指正,謝謝!

 

相關文章