在學習完Selenium的大部分接口或者方法以後,你可能會去面試自動化測試,主要是Selenium的自動化測試。下面這些問題總結,可能會對你有所幫助。javascript
Selenium是一個開源的web自動化測試框架,主要是基於web uI的自動化測試。如今的版本,逐步增長了對移動端的自動化測試。Selenium支持多種語言進行開發自動化測試腳本,有Java,python,C#,Javascript等等。Selenium支持跨瀏覽器平臺測試。css
Selenium不支持桌面軟件的自動化測試,Selenium是根據網頁元素的屬性才定位元素,而其餘桌面軟件自動化測試工具是根據桌面元素的位置來定位元素,固然如今也有根據桌面元素的屬性來定位的前端
引擎比如就是一個發動機。Selenium是沒有關於測試用例和測試套件管理和執行的模塊。咱們須要藉助第三方單元測試框架來實現用例管理和用例的執行。例如Java中有Junit或者testNG,Python中有unittest單元測試框架。java
沒有,這裏須要用到第三方工具。例如Apache POI插件python
最先的有Selenium IDE,IDE只支持安裝在fiefox上一個插件,支持錄製自動化腳本。還有remote RC,和Grid 和webdriver。咱們通常最重要的就是使用webdriver。web
除了基於web的軟件和mobile的程序,selenium不支持桌面軟件自動化測試。軟件測試報告,和用例管理只能依賴第三方插件,例如Junit/TestNG和unittest。因爲它是免費的軟件,因此沒有供應商去提供支持和服務,有問題,只能求助selenium社區。還有一個就是,selenium入門門檻可能有點高,須要具有必定編程語言基礎的才能玩轉面試
ID/className/Name/LinkText/PartialLinkText/Xpath/CSS selector數據庫
imlicitlyWait是隱式等待,通常在查找元素的時候使用。例如,我設置一個查找元素最大時間爲10秒,使用了imlicitlyWait後,若是第一次沒有找到元素,會在10秒以內不斷循環去找元素,知道超過10秒,報超時錯誤。編程
有時候,咱們須要強制設置線程等待,Thread.sleep(2000),driver這個實例,就是當前的線程。windows
這裏出現了跨瀏覽器平臺的概念,就是寫一個測試用例,能夠在主流的幾個瀏覽器跑起來。 是的,我寫的測試用例能在IE,火狐和谷歌這三種瀏覽器上運行。主要是在windows平臺上運行腳本,因此mac的safari瀏覽器暫時沒有寫過。主要實現這個跨瀏覽器的思想就是,把瀏覽器類型寫到配置文件,代碼裏寫if語句去判斷配置文件的瀏覽器的類型,來決定用什麼瀏覽器去執行測試用例。
兩個均可以實現退出瀏覽器session功能,close是關閉你當前聚焦的tab頁面,而quit是關閉所有瀏覽器tab頁面,並退出瀏覽器session。知道這兩個區別,咱們就知道quit通常用在結束測試以前的操做,close用在執行用例過程當中關閉某一個頁面的操做
首先要分析當前網頁試用日曆插件的前端代碼,看看能不能經過元素定位,點擊日期實現,若是不能,可能須要藉助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?
有時候咱們知道元素定位表達式沒有問題,可是仍是提示no such element,那麼咱們就須要考慮這個元素是否在frame中。若是在,咱們就須要從topwindow,經過swithcTo.Frame()方法來切換到目標frame中,能夠經過frame的name和id和索引三種方法來定位frame。
這裏須要用到swithTo方法。
須要獲取當前瀏覽器多窗口句柄,而後根據判斷跳轉新句柄仍是舊句柄
咱們常見的alert彈窗有兩種:基於windows彈窗和基於web頁面彈窗
咱們知道,webdriver是可以處理alert彈窗的,Selenium提供了Alert這個接口。相關操做代碼以下:
// 切換到Alert
Alert alert = driver.switchTo().alert();
// 點擊彈窗上肯定按鈕
alert.accept();
// 點擊彈窗的取消按鈕
alert.dismiss()
// 獲取彈窗上線上的文本文字內容
alert.getText();
// 有些彈窗還支持文本輸入,這個能夠把要輸入字符經過sendkeys方法輸入
alert.sendkeys();
1. ElementNotSelectableException :元素不能選擇異常
2. ElementNotVisibleException :元素不可見異常
3. NoSuchAttributeException :沒有這樣屬性異常
4. NoSuchElementException:沒有該元素異常
5. NoSuchFrameException :沒有該frame異常
6. TimeoutException : 超時異常
7. Element not visible at this point :在當前點元素不可見
首先,兩個都是查找元素,都支持八大元素定位方法。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 = Selenium1.0 + WebDriver(也就是說Selenium2.0合併了這兩個項目)
Rc是在瀏覽器中運行js應用,使用瀏覽器內置的js翻譯器翻譯和執行selenese命令
WebDriver是經過原生瀏覽器支持或瀏覽器擴展來直接控制瀏覽器。針對各瀏覽器而開發,避免了js安全模型致使的限制;還利用操做系統及的調用,模擬用戶輸入;
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能夠用來作接口測試嗎?