两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種瀏覽器兼容性檢測方法和系統(tǒng)的制作方法

文檔序號:6552127閱讀:329來源:國知局
一種瀏覽器兼容性檢測方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種瀏覽器兼容性檢測方法和系統(tǒng),其中瀏覽器兼容性檢測方法包括以下步驟:S1:提供待檢測的源代碼文件及自定義配置文件;S2:根據(jù)所述自定義配置文件的內(nèi)容,對所述待檢測的源代碼文件和檢測規(guī)則文件進行預(yù)處理,標記不進行檢測的源代碼文件和不檢測的規(guī)則文件;S3:根據(jù)預(yù)處理后的結(jié)果,將需要檢測的源代碼文件中的源代碼與規(guī)則庫中需要檢測的全部規(guī)則文件中的檢測規(guī)則進行一一比對,找出兼容性問題并保存檢測結(jié)果;S4:讀取檢測結(jié)果及針對檢測到兼容性問題的預(yù)先處理方案,生成報表。本發(fā)明運用靜態(tài)分析技術(shù)在不運行程序的基礎(chǔ)上,對源代碼的詞法、語法,根據(jù)自定義規(guī)則進行規(guī)則檢測,提高了檢測效率,且安全性更高。
【專利說明】一種瀏覽器兼容性檢測方法和系統(tǒng)

【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及網(wǎng)絡(luò)【技術(shù)領(lǐng)域】,尤其涉及一種用于對網(wǎng)頁或程序在多瀏覽器間運行所 產(chǎn)生的兼容性問題進行檢測的方法及裝置。

【背景技術(shù)】
[0002] 隨著近年來敏捷開發(fā)模式在互聯(lián)網(wǎng)、軟件行業(yè)的廣泛應(yīng)用,負責保證開發(fā)質(zhì)量的 測試工作也面臨巨大的挑戰(zhàn)。測試周期短、測試版本多,開發(fā)與測試的人力配比越來越高, 敏捷測試也成為軟件測試的趨勢?,F(xiàn)有的純手工測試速度慢、效率低,且在大型系統(tǒng)開發(fā)后 期,需要回歸測試的點越多,測試工作的重復(fù)性就越高,想要維持同樣的迭代速度,依靠純 手工測試已不現(xiàn)實。在這種情況下,設(shè)計和使用自動化或半自動化的測試方法及測試工具 是目前軟件測試發(fā)展的當務(wù)之急。
[0003] 目前由于各種主流瀏覽器的解析引擎及環(huán)境不同等原因,導(dǎo)致同一套代碼,通過 不同的瀏覽器解析后展示的頁面效果不一樣,有的會出現(xiàn)布局錯亂、圖片錯位等現(xiàn)象,不僅 僅影響頁面美觀,更有可能導(dǎo)致頁面不可用,造成直接的經(jīng)濟損失。針對上述問題,現(xiàn)有互 聯(lián)網(wǎng)公司對于瀏覽器兼容性問題的檢測大多停留在手工階段,人力成本高、效率低。而現(xiàn)有 的瀏覽器兼容性檢測工具主要分為兩大類:一種是截圖類,將頁面在多個瀏覽器中的打開 結(jié)果截圖返回給用戶;一種是檢測代碼中使用的標簽、屬性是否在瀏覽器中得到支持并發(fā) 現(xiàn)兼容性問題。第一種檢測工具測試時需要大量的人工參與比對每個瀏覽器截圖結(jié)果,而 第二種檢測工具則需要將產(chǎn)品發(fā)布到線上或者開發(fā)、測試機器能夠訪問外網(wǎng)才能夠檢測, 但是檢測后不能快速定位問題并不能給出相應(yīng)解決方法。鑒于安全性、效率及成本等問題 的考慮,上述的兩種檢測工具均已不能適應(yīng)敏捷測試的需求。


【發(fā)明內(nèi)容】

[0004] 本發(fā)明的目的是提供一種具有較高檢測效率且安全性更高的瀏覽器兼容性檢測 方法和系統(tǒng)。
[0005] 為了滿足上述目的,本發(fā)明公開了一種瀏覽器兼容性檢測方法,其特征在于包括 以下步驟: 51 :提供待檢測的源代碼文件及自定義配置文件; 52 :根據(jù)所述自定義配置文件的內(nèi)容,對所述待檢測的源代碼文件和檢測規(guī)則文件進 行預(yù)處理,標記不進行檢測的源代碼文件和不檢測的規(guī)則文件; 53 :根據(jù)預(yù)處理后的結(jié)果,將需要檢測的源代碼文件中的源代碼與規(guī)則庫中需要檢測 的全部規(guī)則文件中的檢測規(guī)則進行一一比對,找出兼容性問題并保存檢測結(jié)果; 54 :讀取檢測結(jié)果及針對檢測到兼容性問題的預(yù)先處理方案,生成報表。
[0006] 所述步驟S2中根據(jù)所述自定義配置文件的內(nèi)容,對所述待檢測的源代碼文件和 檢測規(guī)則文件進行預(yù)處理的步驟具體包括以下步驟: S21 :遍歷待檢測的源代碼文件并判斷源代碼文件大小,若源代碼文件為空,則標記為 不進行檢測的源代碼文件;將待檢測的源代碼文件與所述自定義配置文件中的自定義源代 碼檢測目錄進行比對,標記不進行檢測的源代碼文件; S22 :遍歷規(guī)則庫中的檢測規(guī)則文件,將所述檢測規(guī)則文件與所述自定義配置文件中的 自定義所需檢測規(guī)則進行比對,標記不進行檢測的規(guī)則文件。
[0007] 所述步驟S3具體為:采用深度優(yōu)先算法遍歷預(yù)處理后的需要檢測的源代碼文件 中的文件夾直至遍歷到文件夾的最底層,將最底層文件夾中的源代碼與規(guī)則庫中需要檢測 的全部規(guī)則文件中的檢測規(guī)則進行一一比對直至檢測完畢后返回上一層,檢測其他未被檢 測的源代碼文件夾,直到全部檢測完畢,找出兼容性問題并保存檢測結(jié)果。
[0008] 步驟S3中將最底層文件夾中的源代碼與規(guī)則庫中需要檢測的全部規(guī)則文件中的 檢測規(guī)則進行一一比對的步驟進一步為:采用循環(huán)嵌套的方式調(diào)度規(guī)則庫中需要檢測的全 部規(guī)則文件中的檢測規(guī)則,將最底層文件夾中的源代碼與調(diào)度的檢測規(guī)則進行一一比對。
[0009] 所述步驟S1中的自定義配置文件包括自定義源代碼檢測目錄、自定義所需檢測 規(guī)則、以及規(guī)則等級;所述步驟S2中的規(guī)則文件為將每個檢測規(guī)則設(shè)置成獨立的可直接進 行檢測的文件;所述步驟S3中的規(guī)則庫包括預(yù)先整理提供的瀏覽器兼容性問題描述、造成 的影響及解決方法的規(guī)則組合。
[0010] 所述步驟S3中規(guī)則庫中瀏覽器兼容性問題描述、造成的影響及解決方法的預(yù)先 整理提供的步驟具體包括: 501 :定義URL地址、文件保存路徑,判斷是否存在信息保存文件夾,若存在,則將現(xiàn)有 文件備份,創(chuàng)建保存最終信息文件夾以及中間信息文件夾; 502 :清理提取網(wǎng)頁產(chǎn)生的中間文件; 503 :下載入口網(wǎng)頁,提取所述入口網(wǎng)頁中的兼容性問題編號,拼接下級URL地址; 504 :根據(jù)拼接的下級URL地址,下載所有具有兼容性問題網(wǎng)頁; 505 :運用正則表達式,處理下載到本地的具有兼容性問題的網(wǎng)頁,提出問題描述、造成 的影響以及解決方法。
[0011] 本發(fā)明還公開了一種瀏覽器兼容性檢測系統(tǒng),其特征在于包括: 用戶交互模塊,用于提供待檢測的源代碼文件及自定義配置文件; 規(guī)則調(diào)度模塊,用于根據(jù)所述自定義配置文件的內(nèi)容,對所述待檢測的源代碼文件和 檢測規(guī)則文件進行預(yù)處理,標記不進行檢測的源代碼文件和不檢測的規(guī)則文件; 規(guī)則檢測模塊,用于根據(jù)預(yù)處理后的結(jié)果,將需要檢測的源代碼文件中的源代碼與規(guī) 則庫中需要檢測的全部規(guī)則文件中的檢測規(guī)則進行一一比對,找出兼容性問題并保存檢測 結(jié)果; 生成報表模塊,用于讀取檢測結(jié)果及針對檢測到兼容性問題的預(yù)先處理方案,生成報 表。
[0012] 與現(xiàn)有技術(shù)相比較,本發(fā)明通過運用靜態(tài)分析技術(shù)在不運行程序的基礎(chǔ)上,對源 代碼的詞法、語法,根據(jù)自定義規(guī)則進行規(guī)則檢測,并對檢測出的兼容性問題提供檢測方 法。本發(fā)明提高了檢測效率且具備較高的安全性。

【專利附圖】

【附圖說明】
[0013] 圖1為本發(fā)明瀏覽器兼容性檢測方法的流程圖; 圖2為本發(fā)明瀏覽器兼容性檢測系統(tǒng)的原理方框圖。

【具體實施方式】
[0014] 下面將結(jié)合附圖和【具體實施方式】對本發(fā)明做進一步說明。
[0015] 如圖2所示,本發(fā)明瀏覽器兼容性檢測系統(tǒng)包括:用戶交互模塊、規(guī)則調(diào)度模塊、 規(guī)則檢測模塊以及生成報表模塊。
[0016] 用戶交互模塊,用于提供待檢測的源代碼文件及自定義配置文件。在開始檢測之 前,用戶必須通過用戶交互模塊提供待檢測的源代碼文件。待檢測的源代碼文件可以上網(wǎng) 獲取,也可以是本地的網(wǎng)頁文件。所提供的待檢測的源代碼文件可以采用svn形式或者 http形式,也可以是直接在源代碼目錄執(zhí)行啟動命令行模式的檢測命令。所述自定義配 置文件進一步包括:自定義源代碼檢測目錄、自定義所需檢測規(guī)則、自定義規(guī)則級別、采用 diff增量模式檢測源代碼、發(fā)送郵件等內(nèi)容供用戶選擇使用。所述自定義所需檢測規(guī)則比 如CSS代碼中全角空格的處理方式,"marginwidth〃屬性錯誤處理方式等。針對自定義規(guī) 則級別,用戶可以根據(jù)自身需求自定義,比如對于CSS代碼中全角空格錯誤定義級別較高, 對于"marginwidth〃屬性錯誤定義級別較低。所述diff增量模式是指采用svn形式管理 源代碼,運用svn管理軟件,僅僅下載代碼有更改的部分作為源代碼文件并只檢測與上次 檢測存在變動的增量代碼,以便能夠大大縮短檢測時間,提高檢測效率。通過自定義配置文 件中的內(nèi)容選項,用戶可以自定義檢測哪些源代碼文件、規(guī)定所需檢測的規(guī)則、確定規(guī)則的 級別、檢測模式及檢測結(jié)果的通知方式等。
[0017] 用戶交互模塊的實現(xiàn)方式主要通過Web形式界面和命令行模式。Web形式界面 的提交功能以直觀的可視化方式確定必要的輸入,主要負責接收用戶上傳的自定義配置文 件,并將上傳的自定義配置文件長久保存到特定文件夾便于后續(xù)使用,并且將自定義配置 文件按照時間命名后保存到歷史文件夾便于后續(xù)查看。命令行模式更加簡單、方便且更加 適用于自動化開發(fā)及測試。主要接收用戶或者前端傳遞的命令行參數(shù),對參數(shù)的合理性進 行判斷,并處理簡單的用戶交互請求。用戶輸入命令行參數(shù)后用用戶輸入的信息替換默認 配置文件并生成新配置文件。當用戶輸入不識別的命令行參數(shù)時,則提示出錯,并出現(xiàn)幫助 信息,提示可供接收的命令行參數(shù),并給出正確的使用樣例。
[0018] 當采用Web形式界面時,Web形式界面的功能共分為五個方面: 1) 提供提示信息良好的交互界面供用戶輸入源代碼地址、選擇是否以增量的方式進行 檢測、是否需要發(fā)送報表郵件、提供上傳下載自定義配置文件功能; 2) 提供檢測觸發(fā)功能; 3) 開始檢測后,實時將檢測進度展現(xiàn)給用戶; 4) 檢測結(jié)束后以報表形式展示檢測結(jié)果。
[0019] 規(guī)則調(diào)度模塊,用于根據(jù)所述自定義配置文件的內(nèi)容,對所述待檢測的源代碼文 件和檢測規(guī)則文件進行預(yù)處理,標記不進行檢測的源代碼文件和不檢測的規(guī)則文件。規(guī)則 調(diào)度模塊首先下載源代碼文件,然后根據(jù)所述自定義配置文件的內(nèi)容,對所述待檢測的源 代碼文件和檢測規(guī)則文件進行預(yù)處理。對所述待檢測的源代碼文件和檢測規(guī)則文件進行預(yù) 處理具體包括:遍歷待檢測的源代碼文件并判斷源代碼文件大小,若源代碼文件為空,則標 記為不進行檢測的源代碼文件;將待檢測的源代碼文件與所述自定義配置文件中的自定義 源代碼檢測目錄進行比對,標記不進行檢測的源代碼文件;遍歷規(guī)則庫中的檢測規(guī)則文件, 將所述檢測規(guī)則文件與所述自定義配置文件中的自定義所需檢測規(guī)則進行比對,標記不進 行檢測的規(guī)則文件。
[0020] 所述規(guī)則調(diào)度模塊中還設(shè)置有規(guī)則庫,該規(guī)則庫包括預(yù)先整理提供的瀏覽器兼容 性問題描述、造成的影響及解決方法的規(guī)則組合。規(guī)則的設(shè)計與實現(xiàn)是瀏覽器兼容性檢測 最核心的部分。對規(guī)則的設(shè)計首先要清楚瀏覽器兼容性問題出現(xiàn)的原因,從而針對原因提 出相應(yīng)的解決方法。根據(jù)網(wǎng)頁標準及瀏覽器內(nèi)核的獨特性對瀏覽器兼容性問題進行分類: ①對W3C等標準支持不足與特定元件引起兼容性問題 對于由標準支持不足產(chǎn)生的兼容性問題很多,例如IE6 IE7 IE8(Q)中浮動元素寬度 的shrink-to-fit算法與標準規(guī)定的算法不同,導(dǎo)致在IE6 IE7 IE8(Q)中,如果一個浮 動元素的寬度是shrink-to-fit,該元素的最終寬度可能比預(yù)期的小,并被盡可能的向上布 局。
[0021] ②瀏覽器的內(nèi)核編碼問題引起兼容性問題 瀏覽器內(nèi)核作為瀏覽器中最重要的原件,也不可避免的會出現(xiàn)由于自身編碼導(dǎo)致的各 種問題。這些瀏覽器內(nèi)核的編碼問題最終會造成使用不同瀏覽器內(nèi)核渲染的結(jié)果不同。并 且,當開發(fā)瀏覽器內(nèi)核的組織意識到這些問題,發(fā)布新版本來更改時,用戶未必會選擇使用 新版本的瀏覽器,由CNZZ統(tǒng)計的瀏覽器版本即可得知,大批用戶確實在老版本的瀏覽器, 由其是使用Windows XP系統(tǒng)的用戶,大量在使用XP自帶的IE6。因此,老版本的內(nèi)核bug 雖然已在新發(fā)布的版本中得到修正,但是新的版本沒有被用戶所采用,并且新發(fā)布的瀏覽 器內(nèi)核依然無法避免不出現(xiàn)問題,這也是造成瀏覽器兼容性問題層出不窮的重要原因。
[0022] ③對用戶使用錯誤的處理方式不同引起兼容性問題。
[0023] 對于標準沒有明確規(guī)定的錯誤,盡管各大瀏覽器內(nèi)核都在試圖嘗試使用與其他內(nèi) 核類似的方式進行處理,但總是無法避免開發(fā)者對于各種標簽、屬性的隨意使用,造成各種 沒有被標準規(guī)定的異常行為,對于這些異常行為,瀏覽器內(nèi)核具有自動容錯功能,能夠修復(fù) 異常的內(nèi)容,并使異常代碼繼續(xù)工作。但這并不是HTML最新規(guī)范的內(nèi)容,而是瀏覽器長期 發(fā)展的結(jié)果。對于異常的處理,不可避免的出現(xiàn)各內(nèi)核處理不一致的現(xiàn)象,這也是造成瀏覽 器兼容性的一大原因。
[0024] 針對上述的兼容性問題,規(guī)則庫中預(yù)先設(shè)置了針對這些常見的兼容性問題的檢測 規(guī)則及針對兼容性問題所采用的解決方案,以便在檢測出兼容性問題時能夠為用戶提供相 應(yīng)的解決方法。
[0025] 所述規(guī)則調(diào)度模塊對待檢測的源代碼文件和檢測規(guī)則文件進行預(yù)處理后,即會準 備針對兼容性問題的解決方法。主要采用傳統(tǒng)爬蟲技術(shù)與正則表達式技術(shù)匹配解決方法。 規(guī)則庫中瀏覽器兼容性問題描述、造成的影響及解決方法的準備步驟具體包括: 501 :定義URL地址、文件保存路徑,判斷是否存在信息保存文件夾,若存在,則將現(xiàn)有 文件備份,創(chuàng)建保存最終信息文件夾以及中間信息文件夾; 502 :清理提取網(wǎng)頁產(chǎn)生的中間文件; 503 :下載入口網(wǎng)頁,提取所述入口網(wǎng)頁中的兼容性問題編號,拼接下級URL地址; 504 :根據(jù)拼接的下級URL地址,下載所有具有兼容性問題網(wǎng)頁; S05:運用正則表達式,處理下載到本地的具有兼容性問題的網(wǎng)頁,提出問題描述、造成 的影響以及解決方法。
[0026] 規(guī)則庫中瀏覽器兼容性問題描述、造成的影響及解決方法的準備步驟不需要每次 執(zhí)行,在部署瀏覽器兼容性檢測系統(tǒng)時,以及系統(tǒng)更新時執(zhí)行一次即可。規(guī)則調(diào)度模塊對源 代碼文件及檢測規(guī)則文件預(yù)處理完成后則進入規(guī)則檢測模塊對源代碼進行檢測。
[0027] 規(guī)則檢測模塊,用于根據(jù)預(yù)處理后的結(jié)果,將需要檢測的源代碼文件中的源代碼 與規(guī)則庫中需要檢測的全部規(guī)則文件中的檢測規(guī)則進行一一比對,找出兼容性問題并保存 檢測結(jié)果。
[0028] 規(guī)則檢測模塊主要是對源代碼進行檢測。具體就是采用深度優(yōu)先算法遍歷預(yù)處理 后的需要檢測的源代碼文件中的文件夾直至遍歷到文件夾的最底層,采用循環(huán)嵌套的方式 調(diào)度規(guī)則庫中需要檢測的全部規(guī)則文件中的檢測規(guī)則,將最底層文件夾中的源代碼與調(diào)度 的檢測規(guī)則進行一一比對。檢測完畢后返回上一層源代碼文件夾,檢測其他未被檢測的源 代碼文件夾,直到全部檢測完畢,找出兼容性問題并保存檢測結(jié)果。
[0029] 兼容性檢測執(zhí)行的主要工作步驟分為以下三個方面: 1) 對預(yù)處理后的需要檢測的源代碼文件的大小進行判斷,若文件為空,則不進行檢 測; 2) 若源代碼文件不為空,采用深度優(yōu)先算法遍歷源代碼文件直至遍歷到文件夾的最底 層,采用循環(huán)嵌套的方式調(diào)度規(guī)則庫中需要檢測的全部規(guī)則文件中的檢測規(guī)則,將最低層 文件與調(diào)度的檢測規(guī)則一一比對直至過濾完所有的待檢測規(guī)則。檢測完畢后返回上一層源 代碼文件夾,同樣采用上述的循環(huán)嵌套的方式調(diào)度檢測規(guī)則直至上一層源代碼文件夾過濾 所有的檢測規(guī)則,最終將所有的源代碼文件檢測完畢。若遇到兼容性問題,則保存文件名 稱、檢測規(guī)則、出錯的行、出錯的代碼、兼容性問題級別到特定的檢測結(jié)果文件。
[0030] 3)對檢測結(jié)果文件進行格式判斷,將格式正確的檢測結(jié)果文件傳遞給生成報表模 塊。
[0031] 采用深度優(yōu)先算法遍歷源代碼文件可以將同一個源代碼文件夾中的文件保存記 錄在一起,適合用戶對檢測結(jié)果的查看。用戶體驗也會更好且源代碼會更簡潔易懂,大大提 高了系統(tǒng)的方便性及易讀性。
[0032] 源代碼與規(guī)則比對檢測的過程中,Web形式界面前端實時的通過Ajax技術(shù)獲取檢 測信息,并將檢測結(jié)果打印到Web形式界面中。最終規(guī)則檢測模塊將處理結(jié)果傳遞給生成 報表模塊,生成用戶可識別的報表。
[0033] 生成報表模塊,用于讀取檢測結(jié)果及針對檢測到兼容性問題的預(yù)先處理方案,生 成報表。
[0034] 報表展示部分作為瀏覽器兼容性檢測結(jié)果的輸出部分,決定著檢測系統(tǒng)是否易于 使用,是否便于用戶定位問題,是否能夠提供解決方法來解決問題,甚至直接決定了檢測系 統(tǒng)能否被用戶接受,是否易于推廣。生成報表模塊的主要功能是將讀取到的檢測結(jié)果以及 預(yù)先處理方案根據(jù)模板生成獨立的報表成分,再對獨立的報表成分進行組合,最后將生成 的報表發(fā)送給郵件接收人。
[0035] 生成報表模塊的工作流程分為以下四個部分: 1) 判斷檢測結(jié)果是否為空,若為空,則不生成報表; 2) 若檢測結(jié)果不為空,則根據(jù)自定義配置文件中定義的規(guī)則等級,按照規(guī)則編號,對檢 測結(jié)果的規(guī)則等級進行修改; 3) 對檢測結(jié)果進行總結(jié),統(tǒng)計各個規(guī)則等級對應(yīng)的問題總數(shù)及出現(xiàn)問題的概率; 4) 讀取檢測結(jié)果,按照檢測結(jié)果的文件名填充報表模板,并讀取預(yù)先處理方案,填充報 表模板。
[0036] 運用預(yù)設(shè)的報表模板文件,通過對于檢測結(jié)果的分析、配置文件的讀取、規(guī)則級別 的修改、規(guī)則數(shù)目的統(tǒng)計,生成易于用戶查看、定位兼容性問題的報表。
[0037] 如圖1所示,本發(fā)明瀏覽器兼容性問題的檢測方法,包括以下步驟: S1 :提供待檢測的源代碼文件及自定義配置文件。所述自定義配置文件包括自定義源 代碼檢測目錄、自定義所需檢測規(guī)則、以及規(guī)則等級。例如:規(guī)則庫中A類別的規(guī)則有10條, B類別的規(guī)則由7條,對于用戶提交的自定義配置文件,如果自定義配置文件中定義A類規(guī) 則不需要檢測,那么待檢測源代碼文件就只需要檢測B類的7條規(guī)則就可以了;如果自定義 配置文件中沒有定義需要忽略的規(guī)則,那么對于A、B類17條規(guī)則,待測源代碼文件都要檢 測。
[0038] S2:根據(jù)所述自定義配置文件的內(nèi)容,對所述待檢測的源代碼文件和檢測規(guī)則文 件進行預(yù)處理,標記不進行檢測的源代碼文件和不檢測的規(guī)則文件。
[0039] 所述步驟S2中根據(jù)所述自定義配置文件的內(nèi)容,對所述待檢測的源代碼文件和 檢測規(guī)則文件進行預(yù)處理的步驟具體包括以下步驟: 521 :遍歷待檢測的源代碼文件并判斷源代碼文件大小,若源代碼文件為空,則標記為 不進行檢測的源代碼文件;將待檢測的源代碼文件與所述自定義配置文件中的自定義源代 碼檢測目錄進行比對,標記不進行檢測的源代碼文件; 522 :遍歷規(guī)則庫中的檢測規(guī)則文件,將所述檢測規(guī)則文件與所述自定義配置文件中的 自定義所需檢測規(guī)則進行比對,標記不進行檢測的規(guī)則文件。
[0040] 上述的規(guī)則文件為將每個檢測規(guī)則設(shè)置成獨立的可直接進行檢測的文件 S3 :根據(jù)預(yù)處理后的結(jié)果,將需要檢測的源代碼文件中的源代碼與規(guī)則庫中需要檢測 的全部規(guī)則文件中的檢測規(guī)則進行一一比對,找出兼容性問題并保存檢測結(jié)果。具體為:采 用深度優(yōu)先算法遍歷預(yù)處理后的需要檢測的源代碼文件中的文件夾直至遍歷到文件夾的 最底層,采用循環(huán)嵌套的方式調(diào)度規(guī)則庫中需要檢測的全部規(guī)則文件中的檢測規(guī)則,將最 底層文件夾中的源代碼與調(diào)度的檢測規(guī)則進行一一比對直至檢測完畢后返回上一層,檢測 其他未被檢測的源代碼文件夾,直到全部檢測完畢,找出兼容性問題并保存檢測結(jié)果。
[0041] 采用深度優(yōu)先算法遍歷預(yù)處理后的需要檢測的源代碼文件的偽代碼如下: #getfile S參數(shù)依次為文件路徑,需檢測的文件后綴,忽略的文件,忽略的文件夾,最大 遍歷深度 getfiles (path, allowext, fileomit , diromit , maxdepth = cunt) #如果為文件形式if path is file #檢查文件后綴為需檢測的文件 check if file has allowext #檢查文件不是忽略檢測的文件 check file not fileomit #將文件路徑保存到files中 files, append (path) #若路徑為文件夾,且當前遞歸深度不小于ο elif path is dir and maxdepth > 0 #檢查文件夾不是忽略檢測的文件夾 check dir not diromit #當遍歷完此目錄下的所有文件后,遍歷同級目錄下的其他文件 for next_path in os.listdir(path): #遞歸遍歷此目錄下的所有文件 files += getfiles (next-path, allowext, fileomit, diromit, maxdepth _ 1) return files 規(guī)則庫包括預(yù)先整理提供的瀏覽器兼容性問題描述、造成的影響及解決方法的規(guī)則組 合。規(guī)則庫中瀏覽器兼容性問題描述、造成的影響及解決方法的預(yù)先整理提供的步驟具體 包括: 501 :定義URL地址、文件保存路徑,判斷是否存在信息保存文件夾,若存在,則將現(xiàn)有 文件備份,創(chuàng)建保存最終信息文件夾以及中間信息文件夾; 502 :清理提取網(wǎng)頁產(chǎn)生的中間文件; 503 :下載入口網(wǎng)頁,提取所述入口網(wǎng)頁中的兼容性問題編號,拼接下級URL地址; 504 :根據(jù)拼接的下級URL地址,下載所有具有兼容性問題網(wǎng)頁; 505 :運用正則表達式,處理下載到本地的具有兼容性問題的網(wǎng)頁,提出問題描述、造成 的影響以及解決方法。
[0042] 步驟S05中正則表達式為,在關(guān)鍵信息保存在<h2>與<p>標簽后,由 id="description"、id="influence"、id="solutions"來標不,以 </p> 和 <h2> 結(jié)束的源文 件中,正則表達式如下: #按行讀取id . wd中分行保存的id號 while read line do #執(zhí)行正則表達式,提取id為description、influence、solutions標簽后跟隨的內(nèi)容 cat$Path/${line} · HTML||grep-Po"〈h2\sid=\"description\">.*〈h2|\ sid=\"influence\">.氺<h2I\sid=\"solutions\">.氺<h2"IIsed,s/〈/ h[0_6]>/〈/hl>\n/g' |sed's/〈/p>/〈p>\n/g' |sed's/〈[~>]*>//g' |sed's八s// g' Ised's/'<h2$//g'>>$txtPath/${line}. txt done<id. wd 上述正則表達式,首先讀取下載到以id號命名的HTML文件;其次為了便于按 行處理的grep命令對整個文件同時進行處理,通過tr〃\n〃 〃〃命令將源碼中的換 行符替換為空格,即將整個源文件處理為一行內(nèi)容;之后運用grep命令,提取<h2\ sid=\"description\">.*〈h2 間的所有內(nèi)容;再運用 sed,s/〈/h[0-6]>/〈/hl>\n/g' 命 令,將tr后合成一行的文件在</hl>后進行換行,方便用戶查看;后通過sed ' s/〈Γ>]*>// g'去除〈> 標簽以及標簽內(nèi)的所有內(nèi)容,如〈> 通過Γ>]確保只匹配非〉值,即確保匹配到 的〉符號為跟在〈后的第一個〉,將</hl>、〈h2>等標簽刪除,只留下可讀的文字;最終將文 件保存在以ID命名的txt文件中。
[0043] S4 :讀取檢測結(jié)果及針對檢測到兼容性問題的預(yù)先處理方案,生成報表。
[0044] 應(yīng)用實施例一: 各瀏覽器對"marginwidth〃和〃marginheight"屬性值被設(shè)定為小于零或其他非法 值時,各瀏覽器對其處理不同。此瀏覽器兼容性問題的產(chǎn)生為歸納的第三類"對用戶使用 錯誤的處理方式不同"中的一個典型實例。此兼容性錯誤為對于〈frame〉和〈iframe〉標 簽適用的"marginheigh〃和"marginwidth〃屬性各瀏覽器對于此屬性使用錯誤的處理不 一致。其中marginheight屬性是用來指定框架的內(nèi)容區(qū)域與框架內(nèi)邊框之間的上下空 白距離大小的;而marginwidth屬性被用來指定左右空白距離大小,都是較為常用的屬 性。當 marginheight、marginwidth 值設(shè)置為負數(shù)時,在 IE6、IE7、IE8、Firefox Opera 瀏覽器中,運行結(jié)果是0,這說明這些瀏覽器將這兩個屬性的錯誤值修復(fù)為0 ;而Chrome、 Safari瀏覽器中,瀏覽器忽略了存在錯誤值的屬性,瀏覽器使用默認'margin'值來顯示 頁面。在 IE6、IE7、IE8、Firefox 中,〃marginwidth〃和〃marginheight〃值設(shè)置為非數(shù) 值時,瀏覽器使用默認'margin'值來顯示頁面;Chrome Safari中,瀏覽器將其錯誤值 設(shè)置〇,并將瀏覽器默認'margin'值覆蓋。Opera中,將非數(shù)值賦值錯誤修復(fù)為設(shè)置值 5px ,也將瀏覽器默認'margin'值覆蓋。上述分析可知,各瀏覽器對〃 marginwidth 〃和 "marginheight 〃的錯誤設(shè)定值的處理不同,會導(dǎo)致較大渲染差異。此兼容性問題通過以下 步驟進行檢測: 第一.找到名稱為〈frame〉或者〈iframe〉的標簽; 第二.在標簽內(nèi)查找〃marginwidth 〃或〃marginheight 〃屬性; 第三,對屬性值與規(guī)則進行比對判斷,若屬性值小于〇,或者不是數(shù)字形式,則視為出現(xiàn) 兼各性錯誤,屏.打印錯誤,并保存。
[0045] 為了便于在Python中解析HTML,采用了標準庫HTMLParser庫來解析HTML文檔, HTMLParser庫的一大優(yōu)勢是,可以調(diào)用HTMLParser庫類,將HTML文檔根據(jù)Tag解析成為獨 立的片段,并根據(jù)Tag類型來調(diào)用該類中相應(yīng)的函數(shù)來處理這些片段。〃marginwidth〃和 "marginheight〃的錯誤值檢測步驟中的第一步,查找名稱為〈frame〉或者〈iframe〉的標 簽,即是通過HTMLParser的star tag函數(shù)來實現(xiàn)的。代碼如下所示 #找到名稱為〈iframe〉的標簽 def start」frame (self, attr) 當找到〈frame〉或者〈iframe〉標簽后,后續(xù)的在標簽內(nèi)查找〃marginwidth〃或 "marginheight〃屬性通過字符串匹配的方式實現(xiàn),將文件讀取的每行,利用for循環(huán),逐個 檢測識別到的單詞是否與〃marginwidth 〃或〃marginheight 〃一致。代碼如下所示: #查找〃marginwidth〃或〃marginheight〃屬性,并記錄屬性位置 for item in attr: if (item [0]. lower () == ''marginwidth")or (item [0]. lower ()== ''marginheight"): 上述代碼為了避免大小寫匹配問題,采用了 lower函數(shù),將單詞轉(zhuǎn)化為小寫形式, 并為了獲取匹配到的〃marginwidth〃或〃marginheight〃值,記錄了〃marginwidth" 或〃marginheight〃屬性的位置。在匹配到〈iframe〉標簽中存在〃marginwidth〃或 "marginheight 〃屬性后,定位到的〃marginwidth 〃或〃marginheight 〃位置,讀取了下一 個字段,即〃marginwidth〃或〃marginheight〃屬性值。根據(jù)屬性值,判斷是否小于0并通 過isdigit ()函數(shù)判斷字段是否為數(shù)字,當確定〃marginwidth〃或〃marginheight〃屬性值 小于〇或者不為數(shù)字后,記錄出現(xiàn)的錯誤到RES中,其中按順序保存了 5種信息,即兼容性 規(guī)則編號、源代碼文件名稱、出現(xiàn)問題的行數(shù)、出現(xiàn)問題的代碼行、以及此兼容性問題的等 級。具體代碼如下所示: #讀取下一個字段 charset = item[l]. lower () print charset, LINENO, LINE_RAff #判斷是否小于〇,判斷字段是否為數(shù)字 if ((charset < ' 0') or (charset, isdigit ()) !=1): #記錄出現(xiàn)的錯誤,到RES中 RES. append ([' HM1002', filename, LINENO, LINE_RAff, ' error']) 通過上述三段代碼,能夠檢測出〈frameXiframe〉標簽里marginheight、marginwidth 的非法值。為了使此檢測規(guī)則成為獨立的,可以插拔形式的執(zhí)行文件,還需要在執(zhí)行此代碼 檢測函數(shù)前,判斷輸入的參數(shù)是否為2個,并且判斷通過輸入的源代碼文件路徑能夠否獲 取到文件。對于此類詞法檢測規(guī)則,需要在執(zhí)行代碼前逐行讀取被檢測源代碼的每一行并 將其傳給代碼檢測部分執(zhí)行檢測;為了在后續(xù)報表中展示出文件的行數(shù),需要記錄問題代 碼的行數(shù)。文件的讀取、代碼行的記錄、與檢測函數(shù)執(zhí)行的代碼如下所示: #讀取文件 f=file (filename,' r ) #把文件每一行作為一個list的一個成員,并返回這個list all_lines = f. readlines () mp = HM1002 () #按行執(zhí)行規(guī)則的檢測 for In in all_lines: #在LINE_RAW中記錄此行內(nèi)容 LINE_RAff = In mp. feed(In) #在LINENO中記錄行號 LINENO = LINENO + 1 上述規(guī)則實現(xiàn)部分的代碼所示,將其串連起來即可完整的實現(xiàn)一個可插拔的檢測規(guī) 貝1J。最終待所有的待測文件都檢測完畢后,將檢測結(jié)果傳遞給生成報表模塊,供生成報表使 用。
[0046]我們針對上述的瀏覽器兼容性問題通過代碼具體說明執(zhí)行過程: (1)需要檢測的網(wǎng)頁代碼為: <!D0CTYPE html> <html> <frameset rows=^?5'^ 50%, 25%^y 〈frame sr c = ^/ e xamp 1 e /h tml/frame_a. h tml ^ m a r g i n w i d t h = ^ mar ginheight=^20px 〈frame src= ^/example/h tml/frame_b. h tml 〈frame src= ^/example/h tml/frame_c. h tml </frameset> </html> (2) 針對上述源代碼檢測設(shè)置的檢測規(guī)則為: a) 對于〈frame〉和〈iframe〉標簽的 "marginheigh" 和 "marginwidth" 屬性被設(shè)定為 小于零或其他非法值時,各瀏覽器對其處理不同。規(guī)則代碼如下: #找到名稱為〈iframe〉的標簽 def start」frame (self, attr) #查找〃marginwidth〃或〃marginheight〃屬性,并記錄屬性位置 for item in attr: if(item[0]· lower() ==〃marginwidth〃)or (item[0]. lower() == ''marginheight"): #讀取下一個字段 charset = item[l]. lower () print charset, LINENO, LINE_RAff #判斷是否小于〇,判斷字段是否為數(shù)字 if ((charset < ' 0') or (charset, isdigit ()) !=1): #記錄出現(xiàn)的錯誤,到RES中 RES. append ([' HM1002', filename, LINENO, LINE_RAff, ' error']) b) CSS代碼中對全角空格的處理方式各瀏覽器不一樣,規(guī)則代碼如下: #開始是否存在全角空格的判斷 def check_IdeographicSpace (self, str) #判斷字段中是否存在全角空格 if str. find (u'\u0030') or str. find (u'\u2003'): print str, LINENO, LINE_RAff #記錄出現(xiàn)的錯誤,到RES中 RES. append ([' RN8004', filename, LINENO, LINE_RAff, ' error']) (3) 檢測源代碼腳本文件 #讀取文件 f=file (filename,' r ) #把文件每一行作為一個list的一個成員,并返回這個list all_lines = f. readlines () mp = HM1002 () #按行執(zhí)行規(guī)則的檢測 for In in all_lines: #在LINE_RAW中記錄此行內(nèi)容 LINE_RAff = In mp. feed(In) #在LINENO中記錄行號 LINENO = LINENO + 1 (4) 檢測結(jié)果 檢測出的問題是:〈frame〉和〈iframe〉標簽的"marginheigh"和"marginwidth"屬性 被設(shè)定為小于零或其他非法值 生成的報表為:

【權(quán)利要求】
1. 一種瀏覽器兼容性檢測方法,其特征在于包括以下步驟: 51 :提供待檢測的源代碼文件及自定義配置文件; 52 :根據(jù)所述自定義配置文件的內(nèi)容,對所述待檢測的源代碼文件和檢測規(guī)則文件進 行預(yù)處理,標記不進行檢測的源代碼文件和不檢測的規(guī)則文件; 53 :根據(jù)預(yù)處理后的結(jié)果,將需要檢測的源代碼文件中的源代碼與規(guī)則庫中需要檢測 的全部規(guī)則文件中的檢測規(guī)則進行一一比對,找出兼容性問題并保存檢測結(jié)果; 54 :讀取檢測結(jié)果及針對檢測到兼容性問題的預(yù)先處理方案,生成報表。
2. 如權(quán)利要求1所述的瀏覽器兼容性檢測方法,其特征在于:所述步驟S2中根據(jù)所述 自定義配置文件的內(nèi)容,對所述待檢測的源代碼文件和檢測規(guī)則文件進行預(yù)處理的步驟具 體包括以下步驟: 521 :遍歷待檢測的源代碼文件并判斷源代碼文件大小,若源代碼文件為空,則標記為 不進行檢測的源代碼文件;將待檢測的源代碼文件與所述自定義配置文件中的自定義源代 碼檢測目錄進行比對,標記不進行檢測的源代碼文件; 522 :遍歷規(guī)則庫中的檢測規(guī)則文件,將所述檢測規(guī)則文件與所述自定義配置文件中的 自定義所需檢測規(guī)則進行比對,標記不進行檢測的規(guī)則文件。
3. 如權(quán)利要求2所述的瀏覽器兼容性檢測方法,其特征在于:所述步驟S3具體為:采 用深度優(yōu)先算法遍歷預(yù)處理后的需要檢測的源代碼文件中的文件夾直至遍歷到文件夾的 最底層,將最底層文件夾中的源代碼與規(guī)則庫中需要檢測的全部規(guī)則文件中的檢測規(guī)則進 行一一比對直至檢測完畢后返回上一層,檢測其他未被檢測的源代碼文件夾,直到全部檢 測完畢,找出兼容性問題并保存檢測結(jié)果。
4. 如權(quán)利要求3所述的瀏覽器兼容性檢測方法,其特征在于:步驟S3中將最底層文件 夾中的源代碼與規(guī)則庫中需要檢測的全部規(guī)則文件中的檢測規(guī)則進行一一比對的步驟進 一步為:采用循環(huán)嵌套的方式調(diào)度規(guī)則庫中需要檢測的全部規(guī)則文件中的檢測規(guī)則,將最 底層文件夾中的源代碼與調(diào)度的檢測規(guī)則進行一一比對。
5. 如權(quán)利要求1至4任一項所述的瀏覽器兼容性檢測方法,其特征在于:所述步驟S1 中的自定義配置文件包括自定義源代碼檢測目錄、自定義所需檢測規(guī)則、以及規(guī)則等級;所 述步驟S2中的規(guī)則文件為將每個檢測規(guī)則設(shè)置成獨立的可直接進行檢測的文件;所述步 驟S3中的規(guī)則庫包括預(yù)先整理提供的瀏覽器兼容性問題描述、造成的影響及解決方法的 規(guī)則組合。
6. 如權(quán)利要求5所述的瀏覽器兼容性檢測方法,其特征在于:所述步驟S3中規(guī)則庫中 瀏覽器兼容性問題描述、造成的影響及解決方法的預(yù)先整理提供的步驟具體包括: 501 :定義URL地址、文件保存路徑,判斷是否存在信息保存文件夾,若存在,則將現(xiàn)有 文件備份,創(chuàng)建保存最終信息文件夾以及中間信息文件夾; 502 :清理提取網(wǎng)頁產(chǎn)生的中間文件; 503 :下載入口網(wǎng)頁,提取所述入口網(wǎng)頁中的兼容性問題編號,拼接下級URL地址; 504 :根據(jù)拼接的下級URL地址,下載所有具有兼容性問題網(wǎng)頁; 505 :運用正則表達式,處理下載到本地的具有兼容性問題的網(wǎng)頁,提出問題描述、造成 的影響以及解決方法。
7. -種瀏覽器兼容性檢測系統(tǒng),其特征在于包括: 用戶交互模塊,用于提供待檢測的源代碼文件及自定義配置文件; 規(guī)則調(diào)度模塊,用于根據(jù)所述自定義配置文件的內(nèi)容,對所述待檢測的源代碼文件和 檢測規(guī)則文件進行預(yù)處理,標記不進行檢測的源代碼文件和不檢測的規(guī)則文件; 規(guī)則檢測模塊,用于根據(jù)預(yù)處理后的結(jié)果,將需要檢測的源代碼文件中的源代碼與規(guī) 則庫中需要檢測的全部規(guī)則文件中的檢測規(guī)則進行一一比對,找出兼容性問題并保存檢測 結(jié)果; 生成報表模塊,用于讀取檢測結(jié)果及針對檢測到兼容性問題的預(yù)先處理方案,生成報 表。
【文檔編號】G06F11/36GK104156307SQ201410314265
【公開日】2014年11月19日 申請日期:2014年7月3日 優(yōu)先權(quán)日:2014年7月3日
【發(fā)明者】傅錦虎 申請人:安徽景行信息科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
尉氏县| 永清县| 马公市| 高要市| 遂宁市| 宝兴县| 大宁县| 图们市| 开远市| 孝感市| 大新县| 濮阳市| 泸定县| 右玉县| 新竹市| 铁岭县| 通河县| 大洼县| 马尔康县| 稷山县| 罗山县| 犍为县| 赞皇县| 伊宁市| 乌拉特前旗| 霍林郭勒市| 阳新县| 蒙阴县| 庆元县| 策勒县| 丹东市| 临夏县| 郎溪县| 迭部县| 潮州市| 南安市| 宜兰县| 磴口县| 甘德县| 博乐市| 望江县|