成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

你需要知道的有關(guān)Selenium異常處理的都在這兒

譯文
開發(fā) 后端
在本文中,我們將研究常見的異常,并通過一個簡短的解決方案來解決 Selenium 中的異常處理。

[[432279]]

【51CTO.com快譯】在Java技術(shù)領(lǐng)域,異常處理是一直伴隨著編程本身,被頻繁提及的“古老”話題。在程序代碼執(zhí)行的過程中,倘若我們無法對產(chǎn)生的異常情況,采用及時、妥善的處理,那么很可能會導(dǎo)致應(yīng)用服務(wù)產(chǎn)生異常行為或中斷。當(dāng)然,代碼異常并不可怕,它非但是現(xiàn)代化編程的基本組成部分,而且有助于開發(fā)者知曉該在何時、以及如何處理哪些錯誤。下面,我們將和您討論如何“優(yōu)雅地”處理異常,甚至利用異常處理,來編寫出更加整潔、更易于維護的程序代碼。

什么是異常?

顧名思義,作為程序員的一種常用術(shù)語,“異常”與任何特定的編程語言無關(guān)。它屬于程序因為突然中止,而未能交付出預(yù)期輸出的事件。通常,引發(fā)異常出現(xiàn)的潛在因素往往來自如下方面:

  • Java虛擬內(nèi)存(JVM)的不足
  • 請求訪問的文件在目標(biāo)系統(tǒng)中不存在
  • 用戶提供了無效的數(shù)據(jù)
  • 在正常的通信過程中突然出現(xiàn)斷網(wǎng)

Java中的異常類型

1. 已查明的異常(Checked Exceptions):編譯器在編譯的過程中,會檢查到這些異常,并驗證它們是否已被處理。如果未被處理,系統(tǒng)會報告編譯錯誤。因此它們被通稱為編譯時異常(compile-time exceptions)。下面是一些常見的此類異常示例:

  • SQLException:程序在基于SQL語法執(zhí)行數(shù)據(jù)庫查詢時,可能會產(chǎn)生此類異常。
  • IOException:程序在文件上執(zhí)行無效的I/O流操作時,可能會產(chǎn)生此類異常。
  • ClassNotFoundException:當(dāng)JVM無法找到所需的Java類時,可能會產(chǎn)生此類異常。

2. 未查明的異常(Unchecked Exceptions):這些異常是在程序的執(zhí)行期間發(fā)生的邏輯錯誤,因此通常稱為運行時異常(Runtime Exceptions)。此類異常在編譯時未被檢查出來,或者在整個編譯過程中已被忽略。下面是一些典型的此類異常示例:

  • NullPointerException:當(dāng)訪問具有空值的對象時,可能會產(chǎn)生此類異常。
  • ArrayIndexOutofBound:當(dāng)使用無效的索引值去訪問數(shù)組時,可能會產(chǎn)生此類異常。
  • IllegalArgumentException:當(dāng)程序?qū)⒉徽_的參數(shù)傳遞給方法時,可能會產(chǎn)生此類異常。
  • NumberFormatException:當(dāng)程序?qū)⒆址畟鬟f給無法轉(zhuǎn)換為數(shù)字的方法時,可能會產(chǎn)生此類異常。
  • ArithmeticException:當(dāng)程序執(zhí)行不正確的算術(shù)運算(例如將數(shù)字除以零)時,可能會產(chǎn)生此類異常。

異常處理標(biāo)準(zhǔn)

通過對異常處理能力的提升,我們不僅可以保持代碼的整潔,而且能夠增強其可維護性、可擴展性和可閱讀性。當(dāng)然,不同的面向?qū)ο缶幊?Object-Oriented Programming,OOP)語言,具有不同的異常處理方法。以下是一些常用的Java異常處理標(biāo)準(zhǔn):

Try-Catch:該關(guān)鍵字組合可被用于捕獲異常。其中,try塊應(yīng)當(dāng)被放在開頭,而catch塊應(yīng)被放在try塊的末尾,以便捕獲異常,并采取必要的行動。也就是說,我們可以在遇到異常時,創(chuàng)建異常類的對象,以便使用以下預(yù)定義的方法,來顯示調(diào)試信息:

  • printStackTrace():該函數(shù)可用于打印棧的跟蹤、異常的名稱、以及其他重要的異常信息。
  • getMessage():此函數(shù)有助于獲取針對異常的深入描述。
  1. try 
  2. // Code 
  3. } catch(Exception e){ 
  4. // Code for Handling exception 

同時,Try-Catch塊也可以用其他高級方法來處理異常,例如,我們可能希望從單個代碼塊中捕獲多個異常,那么就可以通過在try塊之后的多個catch塊,去處理不同的異常。而且,我們在try塊之后,使用無限數(shù)量的catch塊。

  1. try 
  2. //Code 
  3. } catch(ExceptionType1 e1){ 
  4. //Code for Handling Exception 1 
  5. } catch(ExceptionType2 e2){ 
  6. //Code for Handling Exception 2 

Throw/Throws:如果程序員想顯式地拋出異常,那么可以使用throw關(guān)鍵字,與要在運行時處理的異常對象協(xié)同使用。

  1. public static void exceptionProgram()throws Exception{  
  2. try { 
  3. // write your code here 
  4. } Catch(Exception b){  
  5. // Throw an Exception explicitly 
  6. throw(b); } 

如果開發(fā)者想拋出多個異常,則可以通過在方法簽名的子句中使用throws關(guān)鍵字來拋出,并且由方法的調(diào)用者去進行異常處理。

  1. public static void exceptionProgram()throws ExceptionType1, ExceptionType2{  
  2. try { 
  3. // write your code here 
  4. } catch(ExceptionType1 e1){ 
  5. // Code to handle exception 1 
  6. } catch(ExceptionType1 e2){ 
  7. // Code to handle exception 2 

finally:該個代碼塊往往是在try-catch塊之后被創(chuàng)建的。也就是說,無論是否拋出異常,它都會被執(zhí)行。

  1. try { 
  2. //Code 
  3. } catch(ExceptionType1 e1){ 
  4. //Catch block 
  5. } catch(ExceptionType2 e2){ 
  6. //Catch block 
  7. }  finally { 
  8. //The finally block always executes. 

Selenium中的常見異常

WebDriverException定義了Selenium中的多種異常,我們從中選取最常見的異常予以介紹,并配上簡單的針對Selenium的異常處理方案:

1. NoSuchElementException

當(dāng)WebDriver無法定位所需要元素時,Selenium可能會產(chǎn)生此類異常。此處的NoSuchElementException是NotFoundException類的子類,它通常出現(xiàn)在程序使用了無效的定位器時。

此外,如果WebDriver仍然停留在上一頁、或正在加載下一頁,而所需的定位器已到達了下一頁時,就會因為該延遲而出現(xiàn)異常。為此,我們應(yīng)當(dāng)通過適當(dāng)?shù)牡却幚頊y試,最大限度地減少此類異常的發(fā)生。

當(dāng)然,此類異常可以在catch塊中被捕獲到,并且可以在其中執(zhí)行所需的操作,以繼續(xù)完成自動化的測試。例如:

  1. try { driver.findElement(By.id("form-save")).click(); } catch(NoSuchElementException e){ 
  2. System.out.println(“WebDriver couldn’t locate the element”); } 

2. NoSuchWindowException

該異常也是NotFoundException類的子類。如果WebDriver嘗試著切換到無效的瀏覽器窗口,那么WebDriver將拋出NoSuchWindowException。因此,要實現(xiàn)窗口切換的好方法是,首先獲取活動窗口的會話,然后在對應(yīng)的窗口上執(zhí)行所需的操作。例如:

  1. for(String windowHandle : driver.getWindowHandles()){ 
  2. try { driver.switchTo().window(handle); } catch(NoSuchWindowException e){ System.out.println(“Exception while switching browser window”); } 

3. NoAlertPresentException

當(dāng)WebDriver嘗試著切換到某個不存在或無效的警報時,Selenium可能會產(chǎn)生此類異常。對此,我建議開發(fā)者使用顯式、或適當(dāng)?shù)牡却龝r間,來處理瀏覽器的各類警報。倘若仍然等不到警報的話,catch塊可以捕獲該異常。例如:

  1. try { 
  2. driver.switchTo().alert().accept(); } catch(NoSuchAlertException e){ 
  3. System.out.println(“WebDriver couldn’t locate the Alert”); } 

4. ElementNotVisibleException

該異常被定義為ElementNotInteractableException類的子類。當(dāng)WebDriver嘗試著對不可見的元素、或不可交互的元素執(zhí)行各項操作時,Selenium可能會產(chǎn)生此類異常。對此,我建議開發(fā)者在的確需要之處,讓Selenium進行適當(dāng)?shù)某瑫r等待。例如:

  1. try { driver.findElement(By.id("form-save")).click(); } catch(ElementNotVisibleException e){ 
  2. System.out.println(“WebDriver couldn’t locate the element”); } 

5. ElementNotSelectableException

該異常屬于InvalidElementStateException類的子類。在Selenium中,ElementNotSelectableException表明某個元素雖然存在于網(wǎng)頁上,但是無法被WebDriver所選擇。

catch塊不但可以處理Selenium中的此類異常,而且可以使用相同或不同的技術(shù),重新選擇相同的元素。例如:

  1. try { 
  2. Select dropdown = new Select(driver.findElement(By.id(“swift”))); } catch(ElementNotSelectableException e){ 
  3. System.out.println("Element could not be selected")} 

6. NoSuchSessionException

Selenium通過driver.quit()命令退出自動化的瀏覽器會話后,以及在調(diào)用某個測試方法時,會產(chǎn)生此類異常。當(dāng)然,如果瀏覽器崩潰或出現(xiàn)斷網(wǎng),該異常也可能會發(fā)生。為了避免出現(xiàn)NoSuchSessionException,我們可以在測試套件結(jié)束時,退出瀏覽器,并確保用于自動化測試的瀏覽器版本的穩(wěn)定性。例如:

  1. private WebDriver driver; 
  2. @BeforeSuite 
  3. public void setUp(){ driver = new ChromeDriver(); } 
  4. @AfterSuite 
  5. public void tearDown(){ driver.quit(); } 

7. StaleElementReferenceException

當(dāng)DOM中不再存在程序所需的元素時,Selenium將拋出StaleElementReferenceException。當(dāng)然,如果DOM未能被正確加載、或WebDriver被卡在錯誤的頁面上時,也可能會產(chǎn)生這種異常。對此,您可以使用catch塊捕獲該異常,并且使用動態(tài)的XPath、或嘗試著重新刷新頁面。例如:

  1. try { driver.findElement(By.xpath(“//*[contains(@id,firstname’)]”)).sendKeys(“Aaron”); 
  2. } catch(StaleElementReferenceException e){ 
  3. System.out.println("Could not interact with a desired element")} 

8. TimeoutException

當(dāng)WebDriver超過了執(zhí)行下一步的等待時限時,Selenium中可能會產(chǎn)生此類異常。Selenium的各種等待通常被用于避免出現(xiàn)ElementNotVisibleException之類的異常。不過,即使在使用了適當(dāng)?shù)牡却螅绻厝匀徊豢山换ィ敲碩imeoutException也會被拋出。為此,我們必須通過執(zhí)行手動測試,來檢驗元素的延時性,以便采取進一步的處理等待。

9. InvalidSelectorException

當(dāng)使用無效的或不正確的選擇器時,Selenium中會拋出此類異常。當(dāng)然,類似情況也可能發(fā)生在創(chuàng)建XPATH時。對此,我們需要在將代碼推送到主分支之前,檢查測試腳本,并測試腳本的端到端流程。此外,SelectorHub和ChroPath等工具,也可以被用于驗證定位器。

10. NoSuchFrameException

NoSuchFrameException屬于NotFoundException類的子類。當(dāng)WebDriver嘗試著切換到當(dāng)前網(wǎng)頁上無效的、或不存在的框架時,Selenium可能會產(chǎn)生此類異常。為此,我們需要首先確保框架的名稱或id是正確的;其次,應(yīng)確保框架的加載不會過于消耗時間。當(dāng)然,如果在網(wǎng)頁上加載框架的確非常耗時的話,則需要修正相應(yīng)的等待處理。例如:

  1. try { 
  2. driver.switchTo().frame("frame_1"); } catch(NoSuchFrameException e){ 
  3. System.out.println("Could not find the desired frame") 

小結(jié)

綜上所述,為了適應(yīng)各種場景,異常處理對于任何自動化腳本和邏輯結(jié)構(gòu)都是至關(guān)重要的。請您務(wù)必在了解每個異常特征的基礎(chǔ)上,有選擇性地在自動化腳本中使用上述十種有關(guān)Selenium的常用異常處理命令。

原文標(biāo)題:All You Need To Know About Exception Handling In Selenium,作者:Ramit Dhamija

【51CTO譯稿,合作站點轉(zhuǎn)載請注明原文譯者和出處為51CTO.com】

 

責(zé)任編輯:華軒 來源: 51CTO
相關(guān)推薦

2019-01-24 08:19:17

云服務(wù)多云云計算

2013-05-27 09:33:13

Windows 8.1

2020-12-23 09:00:00

開發(fā)Web工具

2021-12-09 08:16:40

JVM參數(shù)系統(tǒng)

2021-12-27 08:00:00

Kubernetes容器安全

2019-04-19 08:25:13

HBase基礎(chǔ)Google

2019-04-22 14:12:12

HBase集群Google

2017-08-29 11:21:03

微軟

2020-06-02 07:00:00

會話安全黑客攻擊

2022-09-22 08:00:00

API開發(fā)數(shù)據(jù)

2021-05-17 07:04:07

動態(tài)代理面試

2020-08-12 09:32:31

小米MIUI

2011-09-20 10:56:35

云計算PaaS

2022-04-29 09:00:00

Platform架構(gòu)內(nèi)核線程

2022-08-10 09:03:35

TypeScript前端

2018-09-10 09:26:33

2021-09-01 09:00:00

開發(fā)框架React 18

2022-10-12 08:22:44

Guava工具Collection

2016-03-01 16:14:32

問問應(yīng)用商店Android Wea

2021-02-01 08:39:26

JTAG接口Jlink
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲社区在线 | 国产成人亚洲精品 | 人人cao| 九九久久久 | 亚洲精品免费看 | 999久久久国产精品 欧美成人h版在线观看 | 超碰欧美 | 久久成人亚洲 | 999re5这里只有精品 | 欧美日韩精品国产 | 亚洲午夜精品 | 人人操日日干 | 亚洲欧美在线一区 | 精品国产乱码久久久久久图片 | 国产精品久久久久不卡 | 在线观看成人 | 久久国产精品-国产精品 | 日本在线免费视频 | 国产 日韩 欧美 在线 | 天天操天天舔 | 精品久久久久久久 | 国产精品美女久久久久久久网站 | 久久无毛 | 国产免费一区二区 | 久久亚洲欧美日韩精品专区 | 美女日皮网站 | 国产成人在线一区二区 | 91麻豆精品国产91久久久久久久久 | 天天爽网站 | 国产99久久精品 | 亚洲精品国产精品国自产在线 | 91免费观看 | 毛片网在线观看 | 中国美女撒尿txxxxx视频 | 精品乱码一区二区三四区视频 | 久久国产精品免费一区二区三区 | 亚洲久久久 | 999久久久精品 | 亚洲v日韩v综合v精品v | 日韩欧美一区二区三区免费观看 | 成人性生交大片免费看r链接 |