在上一篇分享中,給大家帶來了selenium核心技術點在筆試/面試中的常見題型,本篇將繼續深入探究自動化測試相關面試點,如果說selenium是一款web自動化測試不可缺的"武器",那就需要安裝到合適的裝置上,才能盡情發揮其優勢,在自動化測試中,所謂的"合適裝置"即:自動化測試框架的選取,自動化框架必備面試問答將是此次分享的重點。
一.筆試/面試中常見技術要點
下篇 —— PART I Selenium WEB自動化技術深入掌握
1.如何處理基於Web的彈出窗口?
答: WebDriver中提供了專門用於處理Alert彈框的API, 包含四種常用方法:
(1)void dismiss(): 單擊彈出窗口中的"取消"按鈕;
(2)void accept(): 單擊彈出窗口中的"確定"按鈕;
(3)String getText(): 返回顯示在Alert框中的文本;
(4)void sendKeys(String stringToSend): 以字符串形式輸入內容至Alert框中;
Sample code:
// 單擊彈出窗口中的"確定"按鈕
Alert alert = driver.switchTo().alert();
alert.accept();
2.如何通過WebDriver觸發鼠標懸停事件?
答: WebDriver提供了廣泛的交互應用API,用戶可以利用這些API自動觸發鼠標/鍵盤事件。Action API就是這樣一種交互性應用API,它可以模擬單個用戶的交互動作;
例如我們可以通過Action API將鼠標懸停在某個下拉菜單上,然後打開其中的選項列表;
Sample Code:
// 初始化Action API
Actions actions=new Actions(driver);
// 鼠標懸停的到下拉菜單上
actions.moveToElement(driver.findElement(By.id("下拉菜單的ID"))).perform();
// 定位並點擊下拉菜單中某個選項
WebElement subLinkOption = driver.findElement(By.id("某選項的ID"));
subLinkOption.click();
3.如何獲取元素的CSS屬性?
答: 通過get() 方法獲取web元素css的屬性值;
例如獲取某web元素CSS中"font-size"的屬性值:
driver.findElement(By.id("某元素ID")).getCssValue("font-size");
4.WebDriver中如何捕獲屏幕截圖?
答: 通過selenium提供的TakesScreenshot和OutputType 完成屏幕截圖;
Sample Code:
// 獲取截屏
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// 將截屏保存到指位置
FileUtils.copyFile(scrFile, new File("C:\\CaptureScreenshot\\sample.jpg"))
5.web測試中如何驗證網頁標題是否正確?
答: 可以結合junit/testNG中的斷言;
// 驗證頁面標題內容是否正確
assertTrue("驗證當前頁面標題正確性:",driver.getTitle().equals("預期頁面標題內容"));
6.selenium如何處理基於Windows的彈出窗口
答:Selenium僅支持Web應用程序測試,不支持基於Windows的應用程序。但可以通過一些第三方工具處理windows彈框,例如AutoIT,Robot。
7.什麼時候應該使用Selenium Grid?
答: Selenium Grid能在多個平臺和瀏覽器上同時執行相同/不同的測試腳本,從而實現分佈式測試執行,Selenium Grid在不同環境下執行測試腳本的特性,可以大大節省自動化測試的執行時間,大幅提高效率。
8.列舉Selenium的侷限性有哪些?
答: Selenium有以下不足之處:
(1)Selenium僅支持基於Web的應用程序的測試;
(2)無法使用Selenium測試移動應用程序,可以選擇Appium進行移動端功能測試;
(3)驗證碼和條形碼閱讀器無法使用Selenium進行測試;
(4)Selenium本身不具有生成測試報告的功能,以JAVA為例,需要結合第三方框架如TestNG或JUnit來生成測試報告;
下篇 —— Part II 自動化測試框架相關知識點技能
9.自動化測試框架的優勢有哪些?
答: 優勢主要包括:
(1)代碼的可重用性
(2)儘可能確保最大測試覆蓋率
(3)場景可恢復性
(4)低廉的後期維護成本
(5)儘可能減少人工干預
(6)自動生成測試報告
10.你瞭解哪些不同類型的測試框架?
答: 比較常見的測試框架種類如下:
(1)基於模塊(module)的測試框架:這類框架將整個"被測應用程序"按邏輯性劃分為若干個獨立模塊。對於每個模塊,我們創建一個獨立的測試腳本。因此,當這些測試腳本合在一起時,就構建成一個更大的測試腳本,對應了更大範圍內的邏輯獨立性模塊。
(2)庫級別(library)的測試框架:基本原理是先確定通用步驟,然後將它們按組進行封裝,封裝成庫函數,任何時候,如有需要,可以在測試腳本中隨時調用這些庫函數。
(3)數據驅動(DDT)測試框架:DDT框架旨在將測試數據從業務邏輯腳本中獨立出來,從而使用戶可以將測試數據存儲到外部數據庫/配置文件中,測試數據一般按"鍵值"對存儲居多,在測試腳本中可以通過測試數據的key, 來獲取實際的value。
(4)關鍵字驅動(Key)測試框架:是對數據驅動的測試框架的擴展,從某種意義上說,它不僅將測試數據與腳本分離,還將測試腳本按業務拆分,單獨封裝,即每一個關鍵字,就是一個業務,關鍵字驅動下的業務拆分力度的精細程度可按實際項目需求來確定, 例如一個簡單的登錄業務可以封裝成一個login關鍵字,一個完整的購物流程同樣也能封裝成一個purchase關鍵字。
11.常見的Junit註釋?
答: Junit註釋主要包含如下幾種:
(1)@Test:告知系統被註釋為"@Test"的方法是一種測試方法。一個測試腳本中可以有多個測試方法;
(2)@Before:該方法應在每個測試方法被執行之前執行;
(3)@After:該方法應在每個測試方法之後再被執行;
(4)@BeforeClass:此方法在當前測試類中所有測試方法執行之前,先被執行一次;
(5)@AfterClass:此方法在當前測試類中所有測試方法都執行完畢後,最後被執行一次;
(6)@Ignore:告知系統不執行此測試方法;
12.TestNG比Junit更好嗎?
答: TestNG是一個開源代碼框架,對比Junit主要優勢如下:
(1)大大擴展了註釋範圍和類別
(2)可以設置執行模式
(3)支持併發執行測試腳本
(4)可以設置測試用例依賴性
13.如何在TestNG中設置測試用例優先級?
答: 以如下代碼為例,進行優先級的設置:
import org.testng.annotations.*;
public class SettingPriority {
@Test(priority=1)
public void method1() {
}
@Test(priority=2)
public void method2() {
}
@Test(priority=0)
public void method3() {
}
}
測試執行順序為:method3 ——》method1 ——》method2
14.斷言(assert)和驗證(verify)之間有什麼區別?
答: 斷言(assert)用於檢查給定條件是否滿足,即True or False;假設我們斷言某給定元素是否存在於頁面上。如果條件為真True,則程序將執行下一個測試步驟,但如果條件為假False,則程序將停止執行,並且不再往下執行後續的測試步驟;
驗證(verify) 同樣是檢查給定條件是對還是錯,即True or False;不同的是,不管條件是否滿足,程序的執行都不會停止,即驗證過程中的任何失敗都不會停止當前的程序執行,並且所有測試步驟都將被執行到;
二.總結
綜合上下兩篇,分別從Selenium核心要點,測試框架的認知及運用等方面進行了web自動化測試中面試或筆試常被問及的技術點, 大家可以在準備相關面試前將此文當作面試備考題的一部分,在大腦中自行過一遍,相信或多或少都能幫到你。
當然,成功的面試不僅需要"考前突擊",更重要的還是平日裡技術經驗的積累,希望本次分享能夠幫到即將面試的你,通過自己的努力披荊斬棘,拿到心儀的OFFER。
#學習資料#※※【重要通知】本期超級福利:《1個案例快速上手web自動化測試》課程,今日限時0元!(限時免費聽)
參與方式:私信“免費聽”即可獲取完整視頻。