Selenium2+python自動化39-關於面試的題


前言
最近看到群里有小伙伴貼出一組面試題,最近又是跳槽黃金季節,小編忍不住抽出一點時間總結了下,
回答不妥的地方歡迎各位高手拍磚指點。
 
一、selenium中如何判斷元素是否存在?
首先selenium里面是沒有這個方法的,判斷元素存在需要自己寫一個方法了。
元素存在有幾種形式,一種是頁面有多個元素屬性重復的,這種直接操作會報錯的;還有一種是頁面隱藏的元素操作也會報錯
 
二、selenium中hidden或者是display = none的元素是否可以定位到?
定位是可以定位到的,但是不能操作,可以判斷元素is_displayed()
(我一直不里面這個定位到底是幾個意思,只要頁面上有的元素,我覺得都能定位到,
實在不行,小編可以爬源碼 Selenium2+python自動化37-爬頁面源碼(page_source),能不能操作那是另外一回事)
 
三、selenium中如何保證操作元素的成功率?也就是說如何保證我點擊的元素一定是可以點擊的?
一種是隱式等待: driver.implicitly_wait()
另外一種是顯式等待:WebDriverWait()
等待時間放長一點參考這篇: Selenium2+python自動化38-顯示等待(WebDriverWait)
 
selenium+python高級教程》已出書: selenium webdriver基於Python源碼案例

(購買此書送對應PDF版本)

 

 
 
四、如何提高selenium腳本的執行速度?
1.少用sleep
2.多用顯式等待方法
3.弄個性能好的電腦

五、用例在運行過程中經常會出現不穩定的情況,也就是說這次可以通過,下次就沒辦法通過了,如何去提升用例的穩定性?
1.查找元素前先做前置條件判斷:expected_conditions()里面的各種方法(這個我的博客里面暫時沒寫。后續補上)
2.顯式等待:WebDriverWait()
這兩者配合使用
 
六、你的自動化用例的執行策略是什么?

1.集成到jenkins一鍵執行,可以手動執行,也可以定時執行

 

 

七、什么是持續集成?

1.持續集成是一種軟件開發實踐,即團隊開發成員經常集成它們的工作,通過每個成員每天至少集成一次,也就意味着每天可能會發生多次集成。
每次集成都通過自動化的構建(包括編譯,發布,自動化測試)來驗證,從而盡早地發現集成錯誤。
 
 
八、自動化測試的時候是不是需要連接數據庫做數據校驗?
1 UI自動化不需要
2 接口測試會需要
 
九、id,name,class,xpath, css selector這些屬性,你最偏愛哪一種,為什么?
1.css妥妥的,css語法簡潔,定位快(xpath語法長,定位慢,還不穩定)
 
十、如何去定位頁面上動態加載的元素?
1. WebDriverWait()方法循環去查詢是否元素加載出來了
 
十一、如何去定位屬性動態變化的元素?
1.先去找該元素不變的屬性,要是都變,那就找不變的父元素,用層級定位(以不變應萬變)
 
十二、點擊鏈接以后,selenium是否會自動等待該頁面加載完畢?
1.這個不會等的,沒加載完也可以下一步操作
 
 
十三、webdriver client的原理是什么?
[Webdriver實現原理](http://www.cnblogs.com/timsheng/archive/2012/06/12/2546957.html)

通過研究selenium-webdriver的源碼,筆者發現其實webdriver的實現原理並不高深莫測無法揣度。在這里以webdriver ruby bindingfirefox-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中返回執行狀態、返回值等信息;

 
十四、webdriver的協議是什么?
1.這個尷尬了,不懂
 
十五、啟動瀏覽器的時候用到的是哪個webdriver協議?
1.http
 
 
十六、什么是page object設計模式?

1.通俗來講,就是頁面元素放到一個腳本,封裝頁面元素操作方法,每個頁面但是一個page對象方便頁面元素的維護

2.測試用例從這個頁面對象腳本里面去調用對應方法

 
 
十七、什么是page factory設計模式?
1.通俗來講,就是把八種元素定位合並為一種方法
(這個我也不知道怎么解釋了。。。)
 
 
十八、怎樣去選擇一個下拉框中的value=xx的option?
1.select類里面提供的方法:select_by_value(“xxx”)
2.xpath的語法也可以定位到
 
 
十九、如何在定位元素后高亮元素(以調試為目的)?
1.js方法,直接讓該元素置頂
2.要是點擊后沒高亮,就用js去修改屬性吧(萬能的js)
 
二十、什么是斷言?

1.assert,判斷測試結果與期望結果是否一致

 
 
十二一、如果你進行自動化測試方案的選型,你會選擇哪種語言,java,js,python還是ruby?

1.大python威武,js也要略懂

 

二十二、page object設置模式中,是否需要在page里定位的方法中加上斷言?

1.不需要
 
 
二十三、page object設計模式中,如何實現頁面的跳轉?
1.click方法
 
 
二十四、自動化測試用例從哪里來?
1.自己寫的
2.別人寫的
(這問題有點腦殘,反正不是天上掉下來的)
 
 
二十五、你覺得自動化測試最大的缺陷是什么?

1.需求變動大的時候,維護成本大

 

二十六、什么是分層測試?

1.數據層

2.接口層

3.UI層

自由發揮吧

 
二十七、webdriver可以用來做接口測試嗎?
1.不可以
用大python就可以了妥妥的了
 
總結:從整個的面試題來看,難度還是挺大的,特別是腳本性能的優化這塊,如果只是會簡單的幾個元素定位是完全無法着手優化的。
能提這些問題出來的面試官也是有一定實力的。
學習過程中有遇到疑問的,可以加selenium(python+java) QQ群交流:646645429


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM