當前位置:菜譜大全網 - 菜譜 - 關於Selenium異常處理,您需要知道的壹切都在這裏。

關於Selenium異常處理,您需要知道的壹切都在這裏。

什麽是不正常?

顧名思義,作為程序員的常用術語,“異常”與任何特定的編程語言無關。屬於程序因突然終止而未能交付預期產出的事件。通常,導致異常的潛在因素往往來自以下幾個方面:

Java虛擬內存(JVM)的缺點

目標系統中不存在請求的文件。

用戶提供了無效數據。

正常通信過程中,突然斷網。

Java中的異常類型

1.檢查異常:在編譯期間,編譯器將檢查這些異常,並驗證它們是否已被處理。如果不處理,系統將報告編譯錯誤。因此,它們通常被稱為編譯時異常。以下是此類異常的壹些常見示例:

SQLException:當程序基於SQL語法執行數據庫查詢時,可能會出現這種異常。

Ioexception:當程序對文件執行無效的I/O流操作時,可能會生成這種異常。

ClassNotFoundException:當JVM找不到所需的Java類時,可能會生成這種異常。

2.未檢查的異常:這些異常是程序執行過程中出現的邏輯錯誤,所以通常稱為運行時異常。這種異常在編譯時沒有被檢測到,或者在整個編譯過程中被忽略。以下是此類異常的壹些典型示例:

NullPointerException:當訪問具有空值的對象時,可能會生成這種異常。

Arrayindexoutofbound:當訪問具有無效索引值的數組時,可能會發生這種異常。

IllegalArgumentException:當程序向方法傳遞不正確的參數時,可能會生成這種異常。

NumberFormatException:當程序將字符串傳遞給無法轉換為數字的方法時,可能會發生這種異常。

算術異常:這種異常可能發生在程序執行不正確的算術運算時(比如將壹個數除以零)。

異常處理標準

通過提高異常處理能力,不僅可以保持代碼的整潔,還可以增強代碼的可維護性、可擴展性和可讀性。當然,不同的面向對象編程(OOP)語言有不同的異常處理方法。以下是壹些常見的Java異常處理標準:

Try-Catch:這個關鍵字組合可以用來捕捉異常。其中,try塊應該放在開頭,catch塊應該放在try塊的結尾,以便捕捉異常並采取必要的操作。也就是說,當我們遇到異常時,我們可以通過使用以下預定義的方法創建壹個異常類的對象來顯示調試信息:

Print stack trace():這個函數可以用來打印堆棧跟蹤、異常名稱和其他重要的異常信息。

Getmessage():這個函數有助於獲得對異常的深入描述。

嘗試

{

//代碼

} catch(異常e){

//處理異常的代碼

}

同時,Try-Catch塊還可以用其他高級方式處理異常。例如,我們可能希望從單個代碼塊中捕獲多個異常,因此我們可以通過try塊之後的多個catch塊來處理不同的異常。此外,我們在try塊之後使用了無限數量的catch塊。

嘗試

{

//代碼

} catch(exception type 1 e 1){

//處理異常的代碼1

} catch(ExceptionType2 e2){

//處理異常2的代碼

}

Throw/Throws:如果程序員希望顯式拋出異常,他可以將Throw關鍵字與要在運行時處理的異常對象結合使用。

公共靜態void exceptionProgram()引發異常{

嘗試{

//在此處編寫代碼

} Catch(異常b){

//顯式引發異常

扔(b);}

}

如果開發人員想要拋出多個異常,他可以通過在方法簽名的子句中使用throws關鍵字來拋出,方法的調用者將處理這些異常。

公共靜態void exceptionProgram()拋出ExceptionType1,ExceptionType2{

嘗試{

//在此處編寫代碼

} catch(exception type 1 e 1){

//處理異常1的代碼

} catch(exception type 1 E2){

//處理異常2的代碼

}

最後:這個代碼塊通常在try-catch塊之後創建。換句話說,無論是否拋出異常,它都會被執行。

嘗試{

//代碼

} catch(exception type 1 e 1){

//Catch塊

} catch(ExceptionType2 e2){

//Catch塊

}最後{

finally塊總是執行。

}

硒的常見例外

WebDriverException在Selenium中定義了各種異常,我們選擇最常見的異常來介紹它們,並為Selenium提供了壹個簡單的異常處理方案:

1.NoSuchElementException

當WebDriver找不到所需的元素時,Selenium可能會生成這樣的異常。這裏的NoSuchElementException是NotFoundException類的子類,通常在程序使用無效定位器時出現。

此外,如果WebDriver仍然停留在上壹頁或者正在加載下壹頁,而所需的定位器已經到達下壹頁,則會因為這個延遲而發生異常。為此,我們應該通過適當的等待處理測試來最大限度地減少此類異常的發生。

當然,這樣的異常可以在catch塊中被捕獲,並且所需的操作可以在其中執行以繼續自動化測試。例如:

嘗試{ driver . find element(by . id(" form-save "))。單擊();} catch(NoSuchElementException e){

System.out.println("WebDriver找不到元素");}

2.NoSuchWindowException

此異常也是NotFoundException類的子類。如果WebDriver試圖切換到無效的瀏覽器窗口,WebDriver將拋出NoSuchWindowException。因此,實現窗口切換的壹個好方法就是先獲取活動窗口的會話,然後在相應的窗口上執行所需的操作。例如:

for(String window handle:driver . getwindowhandles()){

請嘗試{ driver.switchTo()。窗口(手柄);} catch(NoSuchWindowException e){ system . out . println("切換瀏覽器窗口時出現異常");}

}

3.NoAlertPresentException

當WebDriver試圖切換到不存在或無效的警報時,Selenium可能會生成這樣的異常。在這方面,我建議開發者使用顯式或適當的等待時間來處理瀏覽器中的各種警告。如果您仍然不能等待警報,catch塊可以捕獲異常。例如:

嘗試{

driver.switchTo()。警報()。接受();} catch(NoSuchAlertException e){

System.out.println("WebDriver找不到警報");}

4.ElementNotVisibleException

該異常被定義為ElementNotInterlactable異常類的子類。當WebDriver試圖對不可見元素或非交互元素執行操作時,Selenium可能會生成這樣的異常。在這方面,我建議開發人員讓Selenium在真正需要的地方等待適當的超時。例如:

嘗試{ driver . find element(by . id(" form-save "))。單擊();} catch(ElementNotVisibleException e){

System.out.println("WebDriver找不到元素");}

5.ElementNotSelectableException

此異常屬於InvalidElementStateException類的子類。在Selenium中,ElementNotSelectableException表示盡管壹個元素存在於壹個網頁上,但它不能被WebDriver選擇。

Catch塊不僅可以在Selenium中處理這種異常,還可以使用相同或不同的技術重新選擇相同的元素。例如:

嘗試{

Select drop down = new Select(driver . find element(by . id(" swift ")));} catch(ElementNotSelectableException e){

System.out.println("無法選擇元素")}

6.NoSuchSessionException

Selenium將在通過driver.quit()命令退出自動化瀏覽器會話後以及調用測試方法時生成這種異常。當然,如果瀏覽器崩潰或斷開連接,也可能出現這種異常。為了避免NoSuchSessionException,我們可以在測試套件結束時退出瀏覽器,並確保用於自動化測試的瀏覽器版本的穩定性。例如:

私有WebDriver驅動程序;

@ BeforeSuite套件

public void setUp(){ driver = new chrome driver();}

@AfterSuite

public void tear down(){ driver . quit();}

7.StaleElementReferenceException

當程序所需的元素不再存在於DOM中時,Selenium將拋出StaleElementReferenceException。當然,如果DOM加載不正確或者WebDriver卡在錯誤的頁面上,也可能會出現這種異常。在這方面,您可以使用catch塊捕獲異常,並使用動態XPath,或者嘗試刷新頁面。例如:

請嘗試{ driver . find element(by . XPath("//*[contains(@ id,first name '))]")。sendKeys(“亞倫”);

} catch(StaleElementReferenceException e){

System.out.println("無法與所需元素交互")}

8.超時異常

當WebDriver超過執行下壹步的等待時間限制時,Selenium中可能會生成這種異常。Selenium的各種等待通常用於避免ElementNotVisibleException之類的異常。然而,即使使用了適當的等待,如果元素仍然不是交互式的,那麽將拋出TimeoutException。為此,我們必須執行手動測試來檢查元素的延遲,以便采取進壹步的處理和等待。

9.InvalidSelectorException

當使用無效或不正確的選擇器時,Selenium會拋出這種異常。當然,在創建XPATH時可能會出現類似的情況。在這方面,我們需要檢查測試腳本,並在將代碼推送到主分支之前測試腳本的端到端流程。此外,SelectorHub和ChroPath等工具也可用於驗證定位器。

10.NoSuchFrameException

NoSuchFrameException屬於NotFoundException類的子類。當WebDriver試圖切換到當前網頁上的無效或不存在的框架時,Selenium可能會生成這樣的異常。為此,我們需要首先確保框架的名稱或id是正確的;其次,妳應該確保框架的加載不會太耗時。當然,如果在壹個網頁上加載壹個框架真的很耗時,就需要修正相應的等待過程。例如:

嘗試{

driver.switchTo()。frame(" frame _ 1 ");} catch(NoSuchFrameException e){

System.out.println("找不到所需的框架")

}

總結

綜上所述,為了適應各種場景,異常處理對於任何自動化腳本和邏輯結構都是非常重要的。請務必在了解每個異常的特征的基礎上,在自動化腳本中選擇性地使用以上十個關於Selenium的常見異常處理命令。