前言
最近看到羣裏有小夥伴貼出一組面試題,最近又是跳槽黃金季節,小編忍不住抽出一點時間總結了下
1、selenium中如何判斷元素是否存在?
expected_conditions模塊提供了16種判斷方法,如下方法是判斷元素存在DOM中:
presence_of_element_located
""" An expectation for checking that an element is present on the DOM of a page. This does not necessarily mean that the element is visible.
判斷元素存在DOM中,存在並不表明可見(也就是說能夠是隱藏的,存在並不表明能夠被點擊)css
"""
2、selenium中hidden或者是display = none的元素是否能夠定位到?
定位是能夠定位到的,可是不能操做,能夠判斷元素is_displayed()
想點擊的話,能夠用js去掉dispalay=none的屬性
3、selenium中如何保證操做元素的成功率?也就是說如何保證我點擊的元素必定是能夠點擊的?
WebDriverWait()與expected_conditions判斷方法封裝,循環判斷頁面元素出現後再操做,這樣能夠大大提升操做元素的成功率。html
4、如何提升selenium腳本的執行速度?
1.少用sleep,儘可能不用implicitly_wait
2.多用顯式等待方法
3.弄個性能好的電腦
5、用例在運行過程當中常常會出現不穩定的狀況,也就是說此次能夠經過,下次就沒辦法經過了,如何去提高用例的穩定性?
跟第三問同樣,封裝顯示等待與判斷方法
6、你的自動化用例的執行策略是什麼?
1.集成到jenkins一鍵執行,能夠手動執行,也能夠定時執行java
7、什麼是持續集成?
1.持續集成是一種軟件開發實踐,即團隊開發成員常常集成它們的工做,經過每一個成員天天至少集成一次,也就意味着天天可能會發生屢次集成。
每次集成都經過自動化的構建(包括編譯,發佈,自動化測試)來驗證,從而儘早地發現集成錯誤。
8、自動化測試的時候是否是須要鏈接數據庫作數據校驗?
1 UI自動化不須要
2 接口測試會須要
9、id,name,class,xpath, css selector這些屬性,你最偏心哪種,爲何?
1.css妥妥的,css語法簡潔,定位快(xpath語法長,定位慢,還不穩定)python
10、如何去定位頁面上動態加載的元素?
1. WebDriverWait()方法循環去查詢是否元素加載出來了
11、如何去定位屬性動態變化的元素?
1.先去找該元素不變的屬性,要是都變,那就找不變的父元素,用層級定位(以不變應萬變)
12、點擊連接之後,selenium是否會自動等待該頁面加載完畢?
1.這個不會等的,沒加載完也能夠下一步操做
十3、webdriver client的原理是什麼?web
[Webdriver實現原理](http://www.cnblogs.com/timsheng/archive/2012/06/12/2546957.html)
經過研究selenium-webdriver的源碼,筆者發現其實webdriver的實現原理並不高深莫測沒法揣度。在這裏以webdriver ruby binding的firefox-webdriver實現爲例,簡單介紹一下webdriver的工做原理。
當測試腳本啓動firefox的時候,selenium-webdriver 會首先在新線程中啓動firefox瀏覽器。若是測試腳本指定了firefox的profile,那麼就以該profile啓動,不然的話就新啓1個profile,並啓動firefox;面試
firefox通常是以-no-remote的方法啓動,啓動後selenium-webdriver會將firefox綁定到特定的端口,綁定完成後該firefox實例便做爲webdriver的remote server存在;數據庫
客戶端(也就是測試腳本)建立1個session,在該session中經過http請求向remote server發送restful的請求,remote server解析請求,完成相應操做並返回response;設計模式
客戶端接受response,並分析其返回值以決定是轉到第3步仍是結束腳本;
這就是webdriver的工做流程,看起來很複雜實際上當瞭解了webdriver的實現原理後,理解上述問題應該比較簡單。瀏覽器
webdriver是按照server – client的經典設計模式設計的。
server端就是remote server,能夠是任意的瀏覽器。當咱們的腳本啓動瀏覽器後,該瀏覽器就是remote server,它的職責就是等待client發送請求並作出相應;
client端簡單說來就是咱們的測試代碼,咱們測試代碼中的一些行爲,好比打開瀏覽器,轉跳到特定的url等操做是以http請求的方式發送給被 測試瀏覽器,也就是remote server;remote
server接受請求,並執行相應操做,並在response中返回執行狀態、返回值等信息;
十4、webdriver的協議是什麼?
十5、啓動瀏覽器的時候用到的是哪一個webdriver協議?
十6、什麼是page object設計模式?ruby
1.通俗來說,把每一個頁面當成一個頁面對象,頁面層寫定位元素方法和頁面操做方法
2.用例層從頁面層調用操做方法,寫成用例
3.能夠作到定位元素與腳本的分離
十7、什麼是page factory設計模式?
建立一個BasePage類建立多個Page類,繼承BasePage用例層調用Page類
十8、怎樣去選擇一個下拉框中的value=xx的option?
1.select類裏面提供的方法:select_by_value(「xxx」)
2.xpath的語法也能夠定位到
十9、如何在定位元素後高亮元素(以調試爲目的)?
1.js方法,直接讓該元素置頂
2.要是點擊後沒高亮,就用js去修改屬性吧(萬能的js)
二10、什麼是斷言?
1.assert,判斷測試結果與指望結果是否一致
二11、若是你進行自動化測試方案的選型,你會選擇哪一種語言,java,js,python仍是ruby?
1.大python威武,js也要略懂
二12、page object設置模式中,是否須要在page裏定位的方法中加上斷言?
1.不須要,page頁只作元素抓取和操做方法
二十3、page object設計模式中,如何實現頁面的跳轉?
1.初始化driver參數,Page類傳driver參數
二十4、自動化測試用例從哪裏來?
1.本身寫的
2.別人寫的
(這問題有點腦殘,反正不是天上掉下來的)
二十5、你以爲自動化測試最大的缺陷是什麼?
1.需求變更大的時候,維護成本大
二十6、什麼是分層測試?
1.數據層2.接口層3.UI層自由發揮吧 二十7、webdriver能夠用來作接口測試嗎?1.不能夠,webdriver是專門作web的UI自動化參數 總結:從整個的面試題來看,難度仍是挺大的,特別是腳本性能的優化這塊,若是隻是會簡單的幾個元素定位是徹底沒法着手優化的。能提這些問題出來的面試官也是有必定實力的。