1. 程式人生 > 其它 >自動化測試面試題及答案大全(5)

自動化測試面試題及答案大全(5)

1.Selenium是否支援桌面應用軟體的自動化測試。

Selenium不支援桌面軟體的自動化測試,Selenium是根據網頁元素的屬性才定位元素,而其他桌面軟體自動化測試工具是根據桌面元素的位置來定位元素,當然現在也有根據桌面元素的屬性來定位的。

2.Selenium是否支援用例的執行的引擎。

引擎好比就是一個發動機。Selenium是沒有關於測試用例和測試套件管理和執行的模組。我們需要藉助第三方單元測試框架來實現用例管理和用例的執行。例如Java中有Junit或者testNG,Python中有unittest單元測試框架。

3.Seleinum是否有讀取excel檔案的庫
沒有,這裡需要用到第三方工具。例如Apache POI外掛。

4.Selenium有哪些元件?
最早的有Selenium IDE,IDE只支援安裝在fiefox上一個外掛,支援錄製自動化指令碼。還有
remote RC,和Grid 和webdriver。我們一般最重要的就是使用webdriver。

5.Selenium有什麼限制或者缺陷
除了基於web的軟體和mobile的程式,selenium不支援桌面軟體自動化測試。軟體測試報告,和用例管理只能依賴第三方外掛,例如Junit/TestNG和unittest。由於它是免費的軟體,所以沒有供應商去提供支援和服務,有問題,只能求助selenium社群。還有一個就是,selenium入門門檻可能有點高,需要具備一定程式語言基礎的才能玩轉。

6.在selenium中,有哪些不同定位元素方法
ID/className/Name/LinkText/PartialLinkText/Xpath/CSS selector

7.什麼是imlicitlyWait(隱式等待)
webdriver 會在指定的超時時間範圍內不斷的查詢元素,直到找到元素或超時

8.什麼是expliciteWait(顯式等待)
通常是我們自定義的一段程式碼,這段程式碼用來等待某種條件發生後,再繼續執行後續的程式碼

9.什麼是執行緒等待(硬式等待)
如Thread.sleep(2000),webdriver執行緒強制休眠2秒鐘,2秒過後,再執行後續的程式碼。

10.什麼是pollingEvery
這個是設定個一段時間就去做一件事,例如下面設定隔一秒就去查詢元素一次。
WebDriverWait wait = new WebDriverWait(driver,30);
wait.pollingEvery(1, TimeUnit.SECONDS);
driver.findElement(By.xpath(“xxxx”));

11.你寫的測試指令碼能在不同瀏覽器上執行嗎,支援跨瀏覽器平臺嗎
是的,我寫的測試用例能在IE,火狐和谷歌這三種瀏覽器上執行。主要是在windows平臺上執行指令碼,所以mac的safari瀏覽器暫時沒有寫過。主要實現這個跨瀏覽器的思想就是,把瀏覽器型別寫到配置檔案,程式碼裡寫if語句去判斷配置檔案的瀏覽器的型別,來決定用什麼瀏覽器去執行測試用例。

12.什麼是POM,為什麼要使用它
POM是Page Object Model的簡稱,它是一種設計思想,而不是框架。大概的意思是,把一個一個頁面,當做一個物件,頁面的元素和元素之間操作方法就是頁面物件的屬性和行為,所以自然而然就用了類的思想來組織我們的頁面。一般一個頁面寫一個類檔案,這個類檔案包含該頁面的元素定位和業務操作方法
為了我們測試用例寫的簡單,清晰,我們很多時候在頁面物件會封裝很多業務操作方法,測試指令碼只需要呼叫相關方法就可以。
還有一個可能和這個問題相關的面試題,如果頁面元素經常發生需求變化,你是如何做,答案就是採用POM思想。好處就是隻要該一個頁面,我就去修改這個頁面物件的元素定位和相關方法,指令碼不需要修改。

13.在你做自動化過程中,遇到了什麼問題嗎?舉例下
這個問題,不管是自動化還是任何工作,都會被問到。主要想知道你是如何解決問題的,從而推斷你問題分析和解決的能力。
當然有遇到問題和挑戰,主要有以下幾點:
頻繁地變更UI,經常要修改頁面物件裡面程式碼
執行用例報錯和處理,例如元素不可見,元素找不到這樣異常
測試指令碼複用,儘可能多程式碼複用
一些新框架產生的頁面元素定位問題,例如ck編輯器,動態表格等

14.舉例一下你遇到過那些異常,在selenium自動化測試過程中
通過這個問題,大概知道你寫過多少指令碼。寫指令碼過程最常見的異常就是,這個元素無法找到。
常見的selenium有以下這些:

ElementNotSelectableException :元素不能選擇異常
ElementNotVisibleException :元素不可見異常
NoSuchAttributeException :沒有這樣屬性異常
NoSuchElementException:沒有該元素異常
NoSuchFrameException :沒有該frame異常
TimeoutException : 超時異常
Element not visible at this point :在當前點元素不可見

15 如何處理alert彈窗
我們常見的alert彈窗有兩種:基於windows彈窗和基於web頁面彈窗
我們知道,webdriver是能夠處理alert彈窗的,Selenium提供了Alert這個介面。相關操作程式碼如下:
// 切換到Alert
Alert alert = driver.switchTo().alert();
// 點選彈窗上確定按鈕
alert.accept();
// 點選彈窗的取消按鈕
alert.dismiss()
// 獲取彈窗上線上的文字文字內容
alert.getText();
// 有些彈窗還支援文字輸入,這個可以把要輸入字元通過sendkeys方法輸入
alert.sendkeys();

16 在selenium中如何處理多視窗?
這個多視窗之間跳轉處理,在實際selenium自動化測試經常遇到。就是,你點選一個連結,這個連結會在一個新的tab開啟,然後你接下來要查詢元素在新tab開啟的頁面,所以這裡需要用到swithTo方法。
需要獲取當前瀏覽器多視窗控制代碼,然後根據判斷跳轉新控制代碼還是舊控制代碼

17 你查詢元素遇到過在Frame裡面嗎?你是如何處理Frame裡面元素定位的?
有時候我們知道元素定位表示式沒有問題,但是還是提示no such element,那麼我們就需要考慮這個元素是否在frame中。如果在,我們就需要從topwindow,通過swithcTo.Frame()方法來切換到目標frame中,可以通過frame的name和id和索引三種方法來定位frame。

18 怎麼驗證勾選框是enable/disabled/ checked/Unchecked/ displayed/ not displayed?
通過以下方法來驗證元素是enable 還是disable
boolean enabled = driver.findElement(By.xpath(“元素定位表示式”)).isEnabled();

通過以下方法來驗證元素是select/check
boolean checked = driver.findElement(By.xpath(“元素定位表示式”)).isSelected();

通過以下方法來驗證元素是dispalyed還是not display
boolean displayed = driver.findElement(By.xpath(“元素定位表示式”)).isDisplayed();

19 如何處理下拉選單?
通常我們也可以通過Click方法來點選下拉選單裡面的元素,還有一種方法,在Selenium中有一個類叫Select,支援這種下拉選單互動的操作。
基本使用語法是這樣的:
Select Se=new Select(element);
Se.selectByIndex(index);
Se.selectByvalue(value);
Se.selectByVisibleText(text);

20 在日曆這種web 表單你是如何處理的?

首先要分析當前網頁試用日曆外掛的前端程式碼,看看能不能通過元素定位,點選日期實現,如果不能,可能需要藉助javascript。還有些日曆控制元件一個文字輸入框,可以直接sendKeys()方法來實現傳入一個時間的資料。

21關閉瀏覽器中quit和close的區別

簡單來說,兩個都可以實現退出瀏覽器session功能,close是關閉你當前聚焦的tab頁面,而quit是關閉全部瀏覽器tab頁面,並退出瀏覽器session。知道這兩個區別,我們就知道quit一般用在結束測試之前的操作,close用在執行用例過程中關閉某一個頁面的操作。

22 什麼是頁面載入超時

Selenium中有一個 Page Load wait的方法,有時候,我們執行指令碼的速度太快,但是網頁程式還有一部分頁面沒有完全加載出來,就會遇到元素不可見或者元素找不到的異常。為了解決問題,讓指令碼流暢的執行,我們可以通過設定頁面載入超時時間。具體程式碼是這個:driver.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS);

這行作用就是,如果頁面載入超過10秒還沒有完成,就丟擲頁面載入超時的異常。

23.什麼是JavaScript Executor,你什麼時候會用到這個?

JavaScript Executor是一個介面,給driver物件提供一個執行javaScript並訪問和修改前端元素屬性和值。
還是有比較多的場景,我們可能或者需要藉助javaScript來實現:
1.元素通過現有定位表示式不能夠實現點選
2.前端頁面試用了ck-editor這個外掛
3.處理時間日期外掛(可能)
4.生成一個alert彈窗
5.拖拽滾動條
基本語法:
JavascriptExecutor js =(JavascriptExecutor) driver;
js.executeScript(Script,Arguments);

24.在Selenium中如何實現截圖,如何實現用例執行失敗才截圖

在Selenium中提供了一個TakeScreenShot這麼一個介面,這個介面提供了一個getScreenshotAs()方法可以實現全屏截圖。然後我們通過java中的FileUtils來實現把這個截圖拷貝到儲存截圖的路徑。

程式碼舉例:
File src=((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
try {
// 拷貝到我們實際儲存圖片的路徑

FileUtils.copyFile(src,new File(“C:/selenium/error.png”));
}
catch (IOException e)
{
System.out.println(e.getMessage());
}
如果要實現執行用例發現失敗就自動截圖,那麼我們需要把這個截圖方法進行封裝。然後在測試程式碼中的catch程式碼塊去呼叫這個截圖方法。這個我們在POM的框架中一般是把截圖方法封裝到BasePage這個檔案中。

25.在Selenium中如何實現拖拽滾動條?
在Selenium中通過元素定位會自動幫你拖拽到對應位置,所以是沒有自帶的scoll方法。但是這個是有限制,例如當前頁面高度太長,預設是頁上半部分,你定位的元素在頁尾,這個時候可能就會報元素不可見的異常。我們就需要利用javaScript來實現拖拽頁面滾動條。

我們一般可以兩個方法去拖拽,一個是根據拖拽的座標(畫素單位),另外一個是根據拖拽到一個參考元素附件。

程式碼舉例(根據元素座標拖拽):
JavascriptExecutor jse= (JavascriptExecutor)driver;
jse.executeScript(“window.scrollBy(0,250)”, “”);

26.如何實現檔案上傳?
我們在web頁面實現檔案上傳過程中,可以直接把檔案在磁碟完整路徑,通過sendKeys方法實現上傳。如果這種方法不能實現上傳,我們就可能需要藉助第三方工具,我用過一個第三方工具叫autoIT.
還有一個方法是利用robot類

27.如何處理“不受信任的證書”的問題?

例如,在登入12306網站的時候,如果你沒有下載和安裝過這個網站的根證書,那麼你就會遇到開啟12306網站提示證書不受信任的攔截頁面。

下面舉例火狐和谷歌上處理這個問題的基本程式碼

火狐:
// 建立firefoxprofile
FirefoxProfile profile=new FirefoxProfile();
// 點選繼續瀏覽不安全的網站
profile.setAcceptUntrustedCertificates(true);
// 使用帶條件的profile去建立一個driver物件
WebDriver driver=new FirefoxDriver(profile);

Chrome:
// 建立類DesiredCapabilities的物件
DesiredCapabilities cap=DesiredCapabilities.chrome();
// 設定ACCEPT_SSL_CERTS 變數值為true
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
// 新建一個帶capability的chromedriver物件
WebDriver driver=new ChromeDriver(cap);

28.什麼是Firefox Profile?

Profile是一組檔案,主要用來記錄使用者在火狐瀏覽器上的私人資訊,例如書籤,密碼,使用者首選項,下載資料夾儲存路徑等。簡單來說,你開啟火狐瀏覽器輸入about://config,這個頁面有些設定選項是可以通過profile來實現修改的。

29.如何實現滑鼠懸停,鍵盤事件和拖拽動作?

在Webdriver中,處理鍵盤事件和滑鼠事件,一般使用Actions類提供的方法,包括滑鼠懸停,拖拽和組合鍵輸入。

這裡介紹幾個方法

方法:clickAndHold()
使用場景:找到一個元素,點選滑鼠左鍵,不放手。自己可以點選滑鼠不鬆開試試這個場景。

方法:contentClick()
使用場景:模擬滑鼠右鍵點選,一般右鍵會帶出選單來。

方法:doubelClick()
使用場景:模擬滑鼠雙擊

方法:dragAndDrop(source,target)
使用場景:模擬從source這個位置,拖拽一個元素到target位置

鍵盤事件方法:keyDown(keys.ALT), keyUp(keys.SHIFT)
使用場景:點選鍵盤事件,分為兩個動作,一個點選鍵盤,第二個動作是釋放點選(鬆開)

30.在執行指令碼過程,如何實現當前元素高亮顯示?

這個其實就是利用javaScript去修改當前元素的背景顏色來到達高亮顯示的效果,

31.如何獲取頁面標題,懸浮文字和錯誤文字,並驗證?

標題,我們可以通過driver.getTitle()方法來得到一個字串,然後使用字串的containts方法或者equals方法去進行斷言。

懸浮文字(tooltip),一般是利用Actions類,然後滑鼠懸停方法,然後通過getText()方法來得到這個tooltip字串。

錯誤資訊,直接把這個錯誤欄位先進行定位,然後通過getText()方法拿到錯誤文字,主要的斷言有包含,相等,不相等,不包含,以什麼開頭等。

32.在selenium自動化測試中,你一般完成什麼型別的測試?
主要是冒煙測試和迴歸測試。迴歸測試主要寫一些功能穩定,容易實現的場景,通過自動化手段去實現,節約測試時間。

33.你是如何管理你的測試用例並執行?
寫用例和管理並執行用例,我們都需要藉助單元測試框架來實現,如果是Java語言一般有junit和TestNG,如果是python,常見的有unittest。
就你實際情況,說一下。例如我使用TestNG比較多,需要配置testng.xml檔案來實現測試用例的執行。有時候需要配置多個testng.xml去實現不同的任務場景。再展開,可能問你一下testng框架的知識點。例如,方法依賴,用例執行優先順序,資料來源驅動等。

34關於自動化測試報告生成?
我個人一般用TestNG原生的測試報告,也有第三方叫reportNG的外掛,不過我沒有實際使用過。

————————————————
版權宣告:本文為CSDN博主「測試喵」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/qq_33299873/article/details/89412776