selenium面試問題答案總結

1. 什麼是Selenium?
Selenium是一個開源的web自動化測試框架,主要是基於web uI的自動化測試。如今的版本,逐步增長了對移動端的自動化測試。Selenium支持多種語言進行開發自動化測試腳本,有Java,python,C#,Javascript等等。Selenium支持跨瀏覽器平臺測試。javascript

2.Selenium是否支持桌面應用軟件的自動化測試。
Selenium不支持桌面軟件的自動化測試,Selenium是根據網頁元素的屬性才定位元素,而其餘桌面軟件自動化測試工具是根據桌面元素的位置來定位元素,固然如今也有根據桌面元素的屬性來定位的。前端

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

4.Seleinum是否有讀取excel文件的庫
沒有,這裏須要用到第三方工具。例如Apache POI插件。python

5.Selenium有哪些組件?
最先的有Selenium IDE,IDE只支持安裝在fiefox上一個插件,支持錄製自動化腳本。還有
remote RC,和Grid 和webdriver。咱們通常最重要的就是使用webdriver。web

6.Selenium有什麼限制或者缺陷
       除了基於web的軟件和mobile的程序,selenium不支持桌面軟件自動化測試。軟件測試報告,和用例管理只能
依賴第三方插件,例如Junit/TestNG和unittest。因爲它是免費的軟件,因此沒有供應商去提供支持和服務,有問題,只能求助selenium社區。還有一個就是,selenium入門門檻可能有點高,須要具有必定編程語言基礎的才能玩轉。面試

7.在selenium中,有哪些不一樣定位元素方法
ID/className/Name/LinkText/PartialLinkText/Xpath/CSS selectorchrome

8.什麼是imlicitlyWait
imlicitlyWait是隱式等待,通常在查找元素的時候使用。例如,我設置一個查找元素最大時間爲10秒,使用了
imlicitlyWait後,若是第一次沒有找到元素,會在10秒以內不斷循環去找元素,知道超過10秒,報超時錯誤。編程

9.什麼是expliciteWait
這個是顯式等待,就是無論如何都是要等10秒,若是你設置了10秒超時,這個是selenium2的功能
在selenium3中,我暫時沒有找到這個接口。c#

10.什麼是線程等待
有時候,咱們須要強制設置線程等待,Thread.sleep(2000),driver這個實例,就是當前的線程。windows

11.什麼是pollingEvery
這個是設置個一段時間就去作一件事,例以下面設置隔一秒就去查找元素一次。
 WebDriverWait wait = new WebDriverWait(driver,30);
 wait.pollingEvery(1, TimeUnit.SECONDS);
 driver.findElement(By.xpath("xxxx"));

12你能解釋下Selenium這個框架嗎?

    這個問題在面試中被問到的機率仍是比較高的,一樣相似的問題有,selenium的原理是什麼?首先不要被這個問題嚇到,咱們主要圍繞selenium的歷史版本演化和基本的組件去展開描述就好,最後回到webdriver這個組件上面,咱們基本上都是在使用webdriver提供的API。因此這個題目的最好的答案就是把圖畫出來,而後本身解釋幾句就能夠。 早期Selenium1.0是有Selenium Grid,Selenium RC, Selenium IDE, Webdriver四部分組成,後來Selenium RC和Webdriver合併以後,就是Selenium2,當前咱們在使用Selenium3。

 Selenium Grid:它是selenium框架的一部分,主要是專門用來把測試用例並行地在不一樣瀏覽器,不一樣操做系統,不一樣機器上運行。通常咱們寫腳本,調試都在單機上線性地一個測試用例接着一個測試用例執行下去。若是有人問題如何提升測試用例執行效率,告訴他Selenium Grid能夠實現。

 Selenium IDE: 這個算Selenium裏面最簡單的一個組建,只支持在火狐瀏覽器上安裝這個擴展程序,支持錄製web ui腳本,而後導出不一樣語言的腳本,例如java c#等。這個功能算雞肋,由於不少時候導出腳本debug的時間還不如本身代碼從新寫來的快。

 Selenium RC: RC是remote control的縮寫,主要的功能就是讓你無論使用什麼語言(Selenium支持的這幾種語言之一)來寫測試腳本,只要是這個瀏覽器支持java script,那麼寫一遍測試腳本,都能在這些不一樣瀏覽器運行腳本。

 Webdriver:這個是用來替代Selenium RC,就是一個網頁自動化工具,支持在不一樣瀏覽器上運行測試腳本,運行速度比Selenium RC要快不少。聽說(我也記得不清楚),webdriver最先是google內部開發的一個工具,用來捐給selenium了,變成開源了。

    目前,咱們作的web ui的自動化測試,大部分都是在使用webdriver提供的API來模擬手動測試過程當中的一系列動做和行爲。基本上經過這個方式來回答這個問題,那就沒問題了。

 13.你寫的測試腳本能在不一樣瀏覽器上運行嗎,支持跨瀏覽器平臺嗎

 這裏出現了跨瀏覽器平臺的概念,就是寫一個測試用例,能夠在主流的幾個瀏覽器跑起來。

   是的,我寫的測試用例能在IE,火狐和谷歌這三種瀏覽器上運行。主要是在windows平臺上運行腳本,因此mac的safari瀏覽器暫時沒有寫過。主要實現這個跨瀏覽器的思想就是,把瀏覽器類型寫到配置文件,代碼裏寫if語句去判斷配置文件的瀏覽器的類型,來決定用什麼瀏覽器去執行測試用例。

14.一天你寫多少個自動化測試用例

  這個要看具體狀況,徹底取決於手工測試用例的實現難易程度。一般,熟練的話,寫一個5到8個步驟的測試用例,差很少要半小時。時間最多花在元素定位和報錯debug上面,例如在POM思想的框架中,某一些元素定位和方法是複用的,可能會更快一些。因此,一天,大概能完成15-30個自動化測試用例。

 15.什麼是POM,爲何要使用它

  POM是Page Object Model的簡稱,它是一種設計思想,而不是框架。大概的意思是,把一個一個頁面,當作一個對象,頁面的元素和元素之間操做方法就是頁面對象的屬性和行爲,因此天然而然就用了類的思想來組織咱們的頁面。通常一個頁面寫一個類文件,這個類文件包含該頁面的元素定位和業務操做方法。

 爲了咱們測試用例寫的簡單,清晰,咱們不少時候在頁面對象會封裝不少業務操做方法,測試腳本只須要調用相關方法就能夠。

 還有一個可能和這個問題相關的面試題,若是頁面元素常常發生需求變化,你是如何作,答案就是採用POM思想。好處就是隻要該一個頁面,我就去修改這個頁面對象的元素定位和相關方法,腳本不須要修改。

16.在你作自動化過程當中,遇到了什麼問題嗎?舉例下

 這個問題,不論是自動化仍是任何工做,都會被問到。主要想知道你是如何解決問題的,從而推斷你問題分析和解決的能力。

 固然有遇到問題和挑戰,主要有如下幾點:

 頻繁地變動UI,常常要修改頁面對象裏面代碼
 運行用例報錯和處理,例如元素不可見,元素找不到這樣異常
 測試腳本複用,儘量多代碼複用
 一些新框架產生的頁面元素定位問題,例如ck編輯器,動態表格等
  這個遇到的難點徹底取決寫腳本人的代碼能力。回答三個左右就差很少,記得既然拋出了難點問題,必定要記得處理這個問題的方法。

17.舉例一下你遇到過那些異常,在selenium自動化測試過程當中

經過這個問題,大概知道你寫過多少腳本。寫腳本過程最多見的異常就是,這個元素沒法找到。常見的selenium有如下這些:

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

 18. 如何處理alert彈窗

咱們常見的alert彈窗有兩種:基於windows彈窗和基於web頁面彈窗

咱們知道,webdriver是可以處理alert彈窗的,Selenium提供了Alert這個接口。相關操做代碼以下:

 // 切換到Alert

Alert alert = driver.switchTo().alert();

// 點擊彈窗上肯定按鈕

alert.accept();

// 點擊彈窗的取消按鈕
alert.dismiss()

// 獲取彈窗上線上的文本文字內容
alert.getText();

// 有些彈窗還支持文本輸入,這個能夠把要輸入字符經過sendkeys方法輸入
alert.sendkeys();

19. 在selenium中如何處理多窗口?

這個多窗口之間跳轉處理,在實際selenium自動化測試常常遇到。就是,你點擊一個連接,這個連接會在一個新的tab打開,而後你接下來要查找元素在新tab打開的頁面,因此這裏須要用到swithTo方法。

須要獲取當前瀏覽器多窗口句柄,而後根據判斷跳轉新句柄仍是舊句柄,具體代碼能夠參考我博客文章:http://blog.csdn.net/u011541946/article/details/73611301

 20. 你查找元素遇到過在Frame裏面嗎?你是如何處理Frame裏面元素定位的?

有時候咱們知道元素定位表達式沒有問題,可是仍是提示no such element,那麼咱們就須要考慮這個元素是否在frame中。若是在,咱們就須要從topwindow,經過swithcTo.Frame()方法來切換到目標frame中,能夠經過frame的name和id和索引三種方法來定位frame。

 21. 怎麼驗證勾選框是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();

22. 如何處理下拉菜單?

一般咱們也能夠經過Click方法來點擊下拉菜單裏面的元素,還有一種方法,在Selenium中有一個類叫Select,支持這種下拉菜單交互的操做。

基本使用語法是這樣的:

Select Se=new Select(element);
Se.selectByIndex(index);
Se.selectByvalue(value);
Se.selectByVisibleText(text);

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

首先要分析當前網頁試用日曆插件的前端代碼,看看能不能經過元素定位,點擊日期實現,若是不能,可能須要藉助javascript。還有些日曆控件一個文本輸入框,能夠直接sendKeys()方法來實現傳入一個時間的數據。

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

簡單來講,兩個均可以實現退出瀏覽器session功能,close是關閉你當前聚焦的tab頁面,而quit是關閉所有瀏覽器tab頁面,並退出瀏覽器session。知道這兩個區別,咱們就知道quit通常用在結束測試以前的操做,close用在執行用例過程當中關閉某一個頁面的操做。
25. 什麼是頁面加載超時

 Selenium中有一個 Page Load wait的方法,有時候,咱們執行腳本的速度太快,可是網頁程序還有一部分頁面沒有徹底加載出來,就會遇到元素不可見或者元素找不到的異常。爲了解決問題,讓腳本流暢的運行,咱們能夠經過設置頁面加載超時時間。具體代碼是這個:driver.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS);

 這行做用就是,若是頁面加載超過10秒尚未完成,就拋出頁面加載超時的異常。

 26.什麼是JavaScript Executor,你何時會用到這個?

 JavaScript Executor是一個接口,給driver對象提供一個執行javaScript並訪問和修改前端元素屬性和值。

 仍是有比較多的場景,咱們可能或者須要藉助javaScript來實現:

1.元素經過現有定位表達式不可以實現點擊

2.前端頁面試用了ck-editor這個插件

3.處理時間日期插件(可能)

4.生成一個alert彈窗

5.拖拽滾動條

 基本語法:

JavascriptExecutor js =(JavascriptExecutor) driver;
js.executeScript(Script,Arguments);

27.在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這個文件中。

 28.在Selenium中如何實現拖拽滾動條?

  在Selenium中經過元素定位會自動幫你拖拽到對應位置,因此是沒有自帶的scoll方法。可是這個是有限制,例如當前頁面高度太長,默認是頁上半部分,你定位的元素在頁尾,這個時候可能就會報元素不可見的異常。咱們就須要利用javaScript來實現拖拽頁面滾動條。

咱們通常能夠兩個方法去拖拽,一個是根據拖拽的座標(像素單位),另一個是根據拖拽到一個參考元素附件。

 代碼舉例(根據元素座標拖拽):

JavascriptExecutor jse= (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)", "");

 29.如何實現文件上傳?

 咱們在web頁面實現文件上傳過程當中,能夠直接把文件在磁盤完整路徑,經過sendKeys方法實現上傳。若是這種方法不能實現上傳,咱們就可能須要藉助第三方工具,我用過一個第三方工具叫autoIT.

 還有一個方法是利用robot類:

http://blog.csdn.net/u011541946/article/details/74332938

 30.如何處理「不受信任的證書」的問題?

 例如,在登陸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);

31.findElement 和 FindElements有什麼區別?

 首先,兩個都是查找元素,都支持八大元素定位方法。findElement()獲得的只有一個元素,若是根據提供的元素定位方式找不到,會報noSuchElement異常。

 findElements()返回的是一組元素,因此咱們須要根據可以找到一組元素的表達式去定位,返回一組元素咱們能夠放在集合裏,這樣咱們就可使用集合裏面的迭代方法去遍歷元素,拿到元素去作其餘操做。

 32.在執行腳本過程,如何實現當前元素高亮顯示?

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

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

 標題,咱們能夠經過driver.getTitle()方法來獲得一個字符串,而後使用字符串的containts方法或者equals方法去進行斷言。

 懸浮文本(tooltip),通常是利用Actions類,而後鼠標懸停方法,而後經過getText()方法來獲得這個tooltip字符串。

 錯誤信息,直接把這個錯誤字段先進行定位,而後經過getText()方法拿到錯誤文本,主要的斷言有包含,相等,不相等,不包含,以什麼開頭等。

 34.在selenium自動化測試中,你通常完成什麼類型的測試?

     主要是冒煙測試和迴歸測試。迴歸測試主要寫一些功能穩定,容易實現的場景,經過自動化手段去實現,節約測試時間。

 35.你是如何管理你的測試用例並執行?

     寫用例和管理並執行用例,咱們都須要藉助單元測試框架來實現,若是是Java語言通常有junit和TestNG,若是是python,常見的有unittest。

     就你實際狀況,說一下。例如我使用TestNG比較多,須要配置testng.xml文件來實現測試用例的執行。有時候須要配置多個testng.xml去實現不一樣的任務場景。再展開,可能問你一下testng框架的知識點。例如,方法依賴,用例執行優先級,數據源驅動等。

 36.關於自動化測試報告生成?

 我我的通常用TestNG原生的測試報告,也有第三方叫reportNG的插件,不過我沒有實際使用過。

Python下報告生成通常使用HTMLTestRunner.py

 37. 瞭解或者使用過框架不?

 相似的問題還有,你知道那些自動化測試框。

咱們知道POM自動化測試框,還有關鍵字驅動框架。固然還有數據驅動框架,最近幾年出的行爲驅動框架。

 38. 這個框架是你本身寫的嗎?

 我本身設計過POM的框架和關鍵字驅動框架。

 39.能不能介紹下你的框架

    把你本身POM的框架從上往下,樹形結構畫圖出來,而後講下有哪些層,哪些包,包下幾個重點的類的做用和一些工具類說一下。用例如何執行,頁面對象和元素定位放哪裏,錯誤日誌和截圖如何處理,報告如何獲得等。

相關文章
相關標籤/搜索