- 相關(guān)推薦
自動化測試面試題及答案
自動化技術(shù)是一門綜合性技術(shù),自動化和控制論、信息論、系統(tǒng)工程、計算機技術(shù)、電子學(xué)、液壓氣壓技術(shù)、自動控制等都有著十分密切的關(guān)系,以下是小編為你整理的自動化測試面試題及答案,希望能幫到你。
自動化測試面試題
1. 你比較熟悉那種自動化測試工具?
2. 你在你以前工作中是如何使用自動化測試工具的?
3. 介紹一下你在利用自動化測試工具的過程中遇到的一些問題
4. 你是如何計劃自動化測試的?
5. 自動化測試能提高測試效率嗎?
6. 什么是data-driven automoation(數(shù)據(jù)啟動自動化)?
7. 測試自動化的主要特征有哪些?
8. 自動化測試可以代替手工測試嗎?
9.自動化測試的好處是什么?
10. 自動化測試容易出現(xiàn)的誤區(qū)有哪些?
11. 介紹一下測試自動化的常見問題?
12. 你知道哪些測試自動化的腳本技術(shù)?
13. 測試用例的設(shè)計可以自動化嗎?
自動化測試面試題及答案1
一、第一個最常被問到的問題:你最熟悉的元素定位方式有哪些?
id :根據(jù) id 來獲取元素,返回單個元素, id 值一般是唯一的;
name :根據(jù)元素的 name 屬性定位;
tagName :根據(jù)元素的標簽名定位;
className :根據(jù)元素的樣式 class 值定位;
linkText :根據(jù)超鏈接的文本值定位;
partialLinkText :根據(jù)超鏈接的部分文本值定位;
cssSelector : css 選擇器定位;
xpath :通過元素的路徑來定位;
優(yōu)先級最高: ID
優(yōu)先級其次: name
優(yōu)先級再次: CSS selector
優(yōu)先級再次: Xpath
二、如果一個元素無法定位,你一般會考慮哪些因素呢?
這個在我們實際自動化測試過程中也會經(jīng)常遇到,那一般可以從以下幾個方面去考慮:
1、元素定位的方式有誤,可以檢查元素定位的方法是否正確
2、頁面元素加載過慢,需要添加等待時間
3、頁面中有框架面,需要先切換到正確的frame框架再進行定位
三、如果一個元素無法定位,你一般會考慮哪些因素呢?
這個在我們實際自動化測試過程中也會經(jīng)常遇到,那一般可以從以下幾個方面去考慮:
1、元素定位的方式有誤,可以檢查元素定位的方法是否正確
2、頁面元素加載過慢,需要添加等待時間
3、頁面中有框架面,需要先切換到正確的frame框架再進行定位
四、說一說你知道的自動化測試框架
1、RobotFramework
2、Pytest
3、Unittest
4、PyUnit
五、自動化測試中有幾種等待方式,它們之間有什么區(qū)別嗎?
1、強制等待
time.sleep(3):這種等待方式,意味著必須要等待3秒才可以執(zhí)行后續(xù)的代碼。這種形式不夠靈活,有可能頁面3秒之內(nèi)已經(jīng)加載完了,但是還是需要等待3秒才能進行下一步操作。
2、隱式等待
Imlicitlywait:這種形式的等待會在時間內(nèi)不斷查找元素,找到后就可以停止等待。但是這種形式需要等待整個頁面加載完成才能進行下一步操作。
3、顯式等待
WebDriverWait:這種形式的等待,是針對某個元素進行等待,這個元素只要加載完成就可以執(zhí)行后續(xù)的代碼了。這種形式比較靈活。
六、什么是PO模式,它有哪三層?三者的關(guān)系是怎樣的?
PO模式是一種自動化測試設(shè)計思想,是把一個頁面看成一個對象,頁面的元素看成對象的屬性和行為。PO模式一般有三層:
基礎(chǔ)層:封裝一些最基礎(chǔ)的方法
頁面對象層:元素定位,頁面操作等
測試用例層:業(yè)務(wù)邏輯,數(shù)據(jù)驅(qū)動
這三層的關(guān)系:
頁面對象層繼承基礎(chǔ)層,測試用例層調(diào)用頁面對象層
自動化測試面試題及答案2
1.Selenium是否支持桌面應(yīng)用軟件的自動化測試。
Selenium不支持桌面軟件的自動化測試,Selenium是根據(jù)網(wǎng)頁元素的屬性才定位元素,而其他桌面軟件自動化測試工具是根據(jù)桌面元素的位置來定位元素,當然現(xiàn)在也有根據(jù)桌面元素的屬性來定位的。
2.Selenium是否支持用例的執(zhí)行的引擎。
引擎好比就是一個發(fā)動機。Selenium是沒有關(guān)于測試用例和測試套件管理和執(zhí)行的模塊。我們需要借助第三方單元測試框架來實現(xiàn)用例管理和用例的執(zhí)行。例如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。由于它是免費的軟件,所以沒有供應(yīng)商去提供支持和服務(wù),有問題,只能求助selenium社區(qū)。還有一個就是,selenium入門門檻可能有點高,需要具備一定編程語言基礎(chǔ)的才能玩轉(zhuǎn)。
6.在selenium中,有哪些不同定位元素方法
ID/className/Name/LinkText/PartialLinkText/Xpath/CSS selector
7.什么是imlicitlyWait(隱式等待)
webdriver 會在指定的超時時間范圍內(nèi)不斷的查找元素,直到找到元素或超時
8.什么是expliciteWait(顯式等待)
通常是我們自定義的一段代碼,這段代碼用來等待某種條件發(fā)生后,再繼續(xù)執(zhí)行后續(xù)的代碼
9.什么是線程等待(硬式等待)
如Thread.sleep(2000),webdriver線程強制休眠2秒鐘,2秒過后,再執(zhí)行后續(xù)的代碼。
10.什么是pollingEvery
這個是設(shè)置個一段時間就去做一件事,例如下面設(shè)置隔一秒就去查找元素一次。
WebDriverWait wait = new WebDriverWait(driver,30);
wait.pollingEvery(1, TimeUnit.SECONDS);
driver.findElement(By.xpath(“xxxx”));
11.你寫的測試腳本能在不同瀏覽器上運行嗎,支持跨瀏覽器平臺嗎
是的,我寫的測試用例能在IE,火狐和谷歌這三種瀏覽器上運行。主要是在windows平臺上運行腳本,所以mac的safari瀏覽器暫時沒有寫過。主要實現(xiàn)這個跨瀏覽器的思想就是,把瀏覽器類型寫到配置文件,代碼里寫if語句去判斷配置文件的瀏覽器的類型,來決定用什么瀏覽器去執(zhí)行測試用例。
12.什么是POM,為什么要使用它
POM是Page Object Model的簡稱,它是一種設(shè)計思想,而不是框架。大概的意思是,把一個一個頁面,當做一個對象,頁面的元素和元素之間操作方法就是頁面對象的屬性和行為,所以自然而然就用了類的思想來組織我們的頁面。一般一個頁面寫一個類文件,這個類文件包含該頁面的元素定位和業(yè)務(wù)操作方法
為了我們測試用例寫的簡單,清晰,我們很多時候在頁面對象會封裝很多業(yè)務(wù)操作方法,測試腳本只需要調(diào)用相關(guān)方法就可以。
還有一個可能和這個問題相關(guān)的面試題,如果頁面元素經(jīng)常發(fā)生需求變化,你是如何做,答案就是采用POM思想。好處就是只要該一個頁面,我就去修改這個頁面對象的元素定位和相關(guān)方法,腳本不需要修改。
13.在你做自動化過程中,遇到了什么問題嗎?舉例下
這個問題,不管是自動化還是任何工作,都會被問到。主要想知道你是如何解決問題的,從而推斷你問題分析和解決的能力。
當然有遇到問題和挑戰(zhàn),主要有以下幾點:
頻繁地變更UI,經(jīng)常要修改頁面對象里面代碼
運行用例報錯和處理,例如元素不可見,元素找不到這樣異常
測試腳本復(fù)用,盡可能多代碼復(fù)用
一些新框架產(chǎn)生的頁面元素定位問題,例如ck編輯器,動態(tài)表格等
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這個接口。相關(guān)操作代碼如下:
// 切換到Alert
Alert alert = driver.switchTo().alert();
// 點擊彈窗上確定按鈕
alert.accept();
// 點擊彈窗的取消按鈕
alert.dismiss()
// 獲取彈窗上線上的文本文字內(nèi)容
alert.getText();
// 有些彈窗還支持文本輸入,這個可以把要輸入字符通過sendkeys方法輸入
alert.sendkeys();
16 在selenium中如何處理多窗口?
這個多窗口之間跳轉(zhuǎn)處理,在實際selenium自動化測試經(jīng)常遇到。就是,你點擊一個鏈接,這個鏈接會在一個新的tab打開,然后你接下來要查找元素在新tab打開的頁面,所以這里需要用到swithTo方法。
需要獲取當前瀏覽器多窗口句柄,然后根據(jù)判斷跳轉(zhuǎn)新句柄還是舊句柄
17 你查找元素遇到過在Frame里面嗎?你是如何處理Frame里面元素定位的?
有時候我們知道元素定位表達式?jīng)]有問題,但是還是提示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 表單你是如何處理的?
首先要分析當前網(wǎng)頁試用日歷插件的前端代碼,看看能不能通過元素定位,點擊日期實現(xiàn),如果不能,可能需要借助javascript。還有些日歷控件一個文本輸入框,可以直接sendKeys()方法來實現(xiàn)傳入一個時間的數(shù)據(jù)。
21關(guān)閉瀏覽器中quit和close的區(qū)別
簡單來說,兩個都可以實現(xiàn)退出瀏覽器session功能,close是關(guān)閉你當前聚焦的tab頁面,而quit是關(guān)閉全部瀏覽器tab頁面,并退出瀏覽器session。知道這兩個區(qū)別,我們就知道quit一般用在結(jié)束測試之前的操作,close用在執(zhí)行用例過程中關(guān)閉某一個頁面的操作。
22 什么是頁面加載超時
Selenium中有一個 Page Load wait的方法,有時候,我們執(zhí)行腳本的速度太快,但是網(wǎng)頁程序還有一部分頁面沒有完全加載出來,就會遇到元素不可見或者元素找不到的異常。為了解決問題,讓腳本流暢的運行,我們可以通過設(shè)置頁面加載超時時間。具體代碼是這個:driver.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS);
這行作用就是,如果頁面加載超過10秒還沒有完成,就拋出頁面加載超時的異常。
23.什么是JavaScript Executor,你什么時候會用到這個?
JavaScript Executor是一個接口,給driver對象提供一個執(zhí)行javaScript并訪問和修改前端元素屬性和值。
還是有比較多的場景,我們可能或者需要借助javaScript來實現(xiàn):
1.元素通過現(xiàn)有定位表達式不能夠?qū)崿F(xiàn)點擊
2.前端頁面試用了ck-editor這個插件
3.處理時間日期插件(可能)
4.生成一個alert彈窗
5.拖拽滾動條
基本語法:
JavascriptExecutor js =(JavascriptExecutor) driver;
js.executeScript(Script,Arguments);
24.在Selenium中如何實現(xiàn)截圖,如何實現(xiàn)用例執(zhí)行失敗才截圖
在Selenium中提供了一個TakeScreenShot這么一個接口,這個接口提供了一個getScreenshotAs()方法可以實現(xiàn)全屏截圖。然后我們通過java中的FileUtils來實現(xiàn)把這個截圖拷貝到保存截圖的路徑。
代碼舉例:
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());
}
如果要實現(xiàn)執(zhí)行用例發(fā)現(xiàn)失敗就自動截圖,那么我們需要把這個截圖方法進行封裝。然后在測試代碼中的catch代碼塊去調(diào)用這個截圖方法。這個我們在POM的框架中一般是把截圖方法封裝到BasePage這個文件中。
25.在Selenium中如何實現(xiàn)拖拽滾動條?
在Selenium中通過元素定位會自動幫你拖拽到對應(yīng)位置,所以是沒有自帶的scoll方法。但是這個是有限制,例如當前頁面高度太長,默認是頁上半部分,你定位的元素在頁尾,這個時候可能就會報元素不可見的異常。我們就需要利用javaScript來實現(xiàn)拖拽頁面滾動條。
我們一般可以兩個方法去拖拽,一個是根據(jù)拖拽的坐標(像素單位),另外一個是根據(jù)拖拽到一個參考元素附件。
代碼舉例(根據(jù)元素坐標拖拽):
JavascriptExecutor jse= (JavascriptExecutor)driver;
jse.executeScript(“window.scrollBy(0,250)”, “”);
26.如何實現(xiàn)文件上傳?
我們在web頁面實現(xiàn)文件上傳過程中,可以直接把文件在磁盤完整路徑,通過sendKeys方法實現(xiàn)上傳。如果這種方法不能實現(xiàn)上傳,我們就可能需要借助第三方工具,我用過一個第三方工具叫autoIT.
還有一個方法是利用robot類
27.如何處理“不受信任的證書”的問題?
例如,在登錄12306網(wǎng)站的時候,如果你沒有下載和安裝過這個網(wǎng)站的根證書,那么你就會遇到打開12306網(wǎng)站提示證書不受信任的攔截頁面。
下面舉例火狐和谷歌上處理這個問題的基本代碼
火狐:
// 創(chuàng)建firefoxprofile
FirefoxProfile profile=new FirefoxProfile();
// 點擊繼續(xù)瀏覽不安全的網(wǎng)站
profile.setAcceptUntrustedCertificates(true);
// 使用帶條件的profile去創(chuàng)建一個driver對象
WebDriver driver=new FirefoxDriver(profile);
Chrome:
// 創(chuàng)建類DesiredCapabilities的對象
DesiredCapabilities cap=DesiredCapabilities.chrome();
// 設(shè)置ACCEPT_SSL_CERTS 變量值為true
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
// 新建一個帶capability的chromedriver對象
WebDriver driver=new ChromeDriver(cap);
28.什么是Firefox Profile?
Profile是一組文件,主要用來記錄用戶在火狐瀏覽器上的私人信息,例如書簽,密碼,用戶首選項,下載文件夾保存路徑等。簡單來說,你打開火狐瀏覽器輸入about://config,這個頁面有些設(shè)置選項是可以通過profile來實現(xiàn)修改的。
29.如何實現(xiàn)鼠標懸停,鍵盤事件和拖拽動作?
在Webdriver中,處理鍵盤事件和鼠標事件,一般使用Actions類提供的方法,包括鼠標懸停,拖拽和組合鍵輸入。
這里介紹幾個方法
方法:clickAndHold()
使用場景:找到一個元素,點擊鼠標左鍵,不放手。自己可以點擊鼠標不松開試試這個場景。
方法:contentClick()
使用場景:模擬鼠標右鍵點擊,一般右鍵會帶出菜單來。
方法:doubelClick()
使用場景:模擬鼠標雙擊
方法:dragAndDrop(source,target)
使用場景:模擬從source這個位置,拖拽一個元素到target位置
鍵盤事件方法:keyDown(keys.ALT), keyUp(keys.SHIFT)
使用場景:點擊鍵盤事件,分為兩個動作,一個點擊鍵盤,第二個動作是釋放點擊(松開)
30.在執(zhí)行腳本過程,如何實現(xiàn)當前元素高亮顯示?
這個其實就是利用javaScript去修改當前元素的背景顏色來到達高亮顯示的效果,
31.如何獲取頁面標題,懸浮文本和錯誤文本,并驗證?
標題,我們可以通過driver.getTitle()方法來得到一個字符串,然后使用字符串的containts方法或者equals方法去進行斷言。
懸浮文本(tooltip),一般是利用Actions類,然后鼠標懸停方法,然后通過getText()方法來得到這個tooltip字符串。
錯誤信息,直接把這個錯誤字段先進行定位,然后通過getText()方法拿到錯誤文本,主要的斷言有包含,相等,不相等,不包含,以什么開頭等。
32.在selenium自動化測試中,你一般完成什么類型的測試?
主要是冒煙測試和回歸測試;貧w測試主要寫一些功能穩(wěn)定,容易實現(xiàn)的場景,通過自動化手段去實現(xiàn),節(jié)約測試時間。
33.你是如何管理你的測試用例并執(zhí)行?
寫用例和管理并執(zhí)行用例,我們都需要借助單元測試框架來實現(xiàn),如果是Java語言一般有junit和TestNG,如果是python,常見的有unittest。
就你實際情況,說一下。例如我使用TestNG比較多,需要配置testng.xml文件來實現(xiàn)測試用例的執(zhí)行。有時候需要配置多個testng.xml去實現(xiàn)不同的任務(wù)場景。再展開,可能問你一下testng框架的知識點。例如,方法依賴,用例執(zhí)行優(yōu)先級,數(shù)據(jù)源驅(qū)動等。
【自動化測試面試題及答案】相關(guān)文章:
銀行測試面試題及答案04-16
性能測試面試題及答案04-19
軟件測試面試題目04-23
蘋果面試題及答案04-07
經(jīng)典算法面試題及答案04-19
經(jīng)典面試題目及答案04-22
面試題目及答案04-23
新西蘭面試題的答案04-15
薪酬面試題及答案04-15