- 1. 專業技術
在學習完Selenium的大部分接口或者方法之后,你可能會去面試自動化測試,主要是Selenium的自動化測試。下面這些問題總結,可能會對你有所幫助。
- 什么是Selenium?
Selenium是一個開源的web自動化測試框架,主要是基於web uI的自動化測試。現在的版本,逐步增加了對移動端的自動化測試。Selenium支持多種語言進行開發自動化測試腳本,有Java,python,C#,Javascript等等。Selenium支持跨瀏覽器平台測試。
- Selenium是否支持桌面應用軟件的自動化測試。
Selenium不支持桌面軟件的自動化測試,Selenium是根據網頁元素的屬性才定位元素,而其他桌面軟件自動化測試工具是根據桌面元素的位置來定位元素,當然現在也有根據桌面元素的屬性來定位的
- Selenium是否支持用例的執行的引擎
引擎好比就是一個發動機。Selenium是沒有關於測試用例和測試套件管理和執行的模塊。我們需要借助第三方單元測試框架來實現用例管理和用例的執行。例如Java中有Junit或者testNG,Python中有unittest單元測試框架。
- Seleinum是否有讀取excel文件的庫
沒有,這里需要用到第三方工具。例如Apache POI插件
- Selenium有哪些組件
最早的有Selenium IDE,IDE只支持安裝在fiefox上一個插件,支持錄制自動化腳本。還有remote RC,和Grid 和webdriver。我們一般最重要的就是使用webdriver。
- Selenium有什么限制或者缺陷
除了基於web的軟件和mobile的程序,selenium不支持桌面軟件自動化測試。軟件測試報告,和用例管理只能依賴第三方插件,例如Junit/TestNG和unittest。由於它是免費的軟件,所以沒有供應商去提供支持和服務,有問題,只能求助selenium社區。還有一個就是,selenium入門門檻可能有點高,需要具備一定編程語言基礎的才能玩轉
- 在selenium中,有哪些不同定位元素方法
ID/className/Name/LinkText/PartialLinkText/Xpath/CSS selector
- 什么是imlicitlyWait
imlicitlyWait是隱式等待,一般在查找元素的時候使用。例如,我設置一個查找元素最大時間為10秒,使用了imlicitlyWait后,如果第一次沒有找到元素,會在10秒之內不斷循環去找元素,知道超過10秒,報超時錯誤。
- 什么是線程等待
有時候,我們需要強制設置線程等待,Thread.sleep(2000),driver這個實例,就是當前的線程。
- 你能解釋下Selenium這個框架嗎?
- 你寫的測試腳本能在不同瀏覽器上運行嗎,支持跨瀏覽器平台嗎?
這里出現了跨瀏覽器平台的概念,就是寫一個測試用例,可以在主流的幾個瀏覽器跑起來。 是的,我寫的測試用例能在IE,火狐和谷歌這三種瀏覽器上運行。主要是在windows平台上運行腳本,所以mac的safari瀏覽器暫時沒有寫過。主要實現這個跨瀏覽器的思想就是,把瀏覽器類型寫到配置文件,代碼里寫if語句去判斷配置文件的瀏覽器的類型,來決定用什么瀏覽器去執行測試用例。
- 關閉瀏覽器中quit和close的區別
兩個都可以實現退出瀏覽器session功能,close是關閉你當前聚焦的tab頁面,而quit是關閉全部瀏覽器tab頁面,並退出瀏覽器session。知道這兩個區別,我們就知道quit一般用在結束測試之前的操作,close用在執行用例過程中關閉某一個頁面的操作
- 在日歷這種web 表單你是如何處理的?
首先要分析當前網頁試用日歷插件的前端代碼,看看能不能通過元素定位,點擊日期實現,如果不能,可能需要借助javascript。還有些日歷控件一個文本輸入框,可以直接sendKeys()方法來實現傳入一個時間的數據。
- 如何處理下拉菜單?
通常我們也可以通過Click方法來點擊下拉菜單里面的元素,還有一種方法,在Selenium中有一個類叫Select,支持這種下拉菜單交互的操作。
基本使用語法是這樣的:
Select Se=new Select(element);
Se.selectByIndex(index);
Se.selectByvalue(value);
Se.selectByVisibleText(text);
- 怎么驗證勾選框是
enable/disabled/ checked/Unchecked/ displayed/ not displayed?
- 你查找元素遇到過在Frame里面嗎?你是如何處理Frame里面元素定位的?
有時候我們知道元素定位表達式沒有問題,但是還是提示no such element,那么我們就需要考慮這個元素是否在frame中。如果在,我們就需要從topwindow,通過swithcTo.Frame()方法來切換到目標frame中,可以通過frame的name和id和索引三種方法來定位frame。
- 在selenium中如何處理多窗口?
這里需要用到swithTo方法。
需要獲取當前瀏覽器多窗口句柄,然后根據判斷跳轉新句柄還是舊句柄
- 如何處理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自動化測試過程中
1. ElementNotSelectableException :元素不能選擇異常
2. ElementNotVisibleException :元素不可見異常
3. NoSuchAttributeException :沒有這樣屬性異常
4. NoSuchElementException:沒有該元素異常
5. NoSuchFrameException :沒有該frame異常
6. TimeoutException : 超時異常
7. Element not visible at this point :在當前點元素不可見
- findElement 和 FindElements有什么區別?
首先,兩個都是查找元素,都支持八大元素定位方法。findElement()得到的只有一個元素,如果根據提供的元素定位方式找不到,會報noSuchElement異常。
findElements()返回的是一組元素,所以我們需要根據能夠找到一組元素的表達式去定位,返回一組元素我們可以放在集合里,這樣我們就可以使用集合里面的迭代方法去遍歷元素,拿到元素去做其他操作。
- 如何獲取頁面標題,懸浮文本和錯誤文本,並驗證?
標題,我們可以通過driver.getTitle()方法來得到一個字符串,然后使用字符串的containts方法或者equals方法去進行斷言。
懸浮文本(tooltip),一般是利用Actions類,然后鼠標懸停方法,然后通過getText()方法來得到這個tooltip字符串。
錯誤信息,直接把這個錯誤字段先進行定位,然后通過getText()方法拿到錯誤文本,主要的斷言有包含,相等,不相等,不包含,以什么開頭等。
- 你是如何管理你的測試用例並執行?
寫用例和管理並執行用例,我們都需要借助單元測試框架來實現,如果是Java語言一般有junit和TestNG,如果是python,常見的有unittest。
就你實際情況,說一下。例如我使用TestNG比較多,需要配置testng.xml文件來實現測試用例的執行。有時候需要配置多個testng.xml去實現不同的任務場景。再展開,可能問你一下testng框架的知識點。例如,方法依賴,用例執行優先級,數據源驅動等。
- 如何確定動態加載的元素:
- xpath或者css通過同級、父級、子級進行定位
- 介紹一下selenium2.0
Selenium2.0 = Selenium1.0 + WebDriver(也就是說Selenium2.0合並了這兩個項目)
Rc是在瀏覽器中運行js應用,使用瀏覽器內置的js翻譯器翻譯和執行selenese命令
WebDriver是通過原生瀏覽器支持或瀏覽器擴展來直接控制瀏覽器。針對各瀏覽器而開發,避免了js安全模型導致的限制;還利用操作系統及的調用,模擬用戶輸入;
- 請說明selenium 2.0與3.0的區別
Selenium 2.0 =Selenium 1.0+WebDriver
Selenium 3.0舍棄rc只有driver
- 元素找不到可能的原因?
1.動態id定位不到元素
2.iframe原因定位不到元素
3.不在同一個frame里邊查找元素
4. xpath描述錯誤
5.點擊速度過快 頁面沒有加載出來就需要點擊頁面上的元素
6.firefox安全性強,不允許跨域調用出現報錯
selenium中如何判斷元素是否存在?
selenium中hidden或者是display = none的元素是否可以定位到?
selenium中如何保證操作元素的成功率?也就是說如何保證我點擊的元素一定是可以點擊的?
如何提高selenium腳本的執行速度?
用例在運行過程中經常會出現不穩定的情況,也就是說這次可以通過,下次就沒辦法通過了,如何去提升用例的穩定性?
你的自動化用例的執行策略是什么?
什么是持續集成?
自動化測試的時候是不是需要連接數據庫做數據校驗?
id,name,clas,x path, css selector這些屬性,你最偏愛哪一種,為什么?
如何去定位頁面上動態加載的元素?
如何去定位屬性動態變化的元素?
點擊鏈接以后,selenium是否會自動等待該頁面加載完畢?
webdriver client的原理是什么?
webdriver的協議是什么?
啟動瀏覽器的時候用到的是哪個webdriver協議?
什么是page object設計模式?
什么是page factory設計模式?
怎樣去選擇一個下拉框中的value=xx的option?
如何在定位元素后高亮元素(以調試為目的)?
什么是斷言?
如果你進行自動化測試方案的選型,你會選擇哪種語言,java,js,python還是ruby?
page object設置模式中,是否需要在page里定位的方法中加上斷言?
page object設計模式中,如何實現頁面的跳轉?
自動化測試用例從哪里來?
你覺得自動化測試最大的缺陷是什么?
什么是分層測試?
webdriver可以用來做接口測試嗎?