1、Selenium原理 、 webdriver 原理是什麼?css
當測試腳本經過瀏覽器驅動(谷歌瀏覽器chromedriver.exe)啓動Chrome的時候,selenium-webdriver 在新線程中啓動Chrome瀏覽器。啓動後selenium-webdriver會將Chrome綁定到特定的端口,綁定完成後chrome實例做爲webdriver的remote server;客戶端(也就是測試腳本)建立1個會話,在該session中經過http請求向remote server發送請求,請求的內容以json格式傳輸,webdriver翻譯請求內容,轉換爲命令經過指定端口發送給remote server解析請求,完成相應操做並返回response;客戶端接受response,並分析其返回值。web
webdriver是按照server – client的經典設計模式設計的。chrome
server端就是remote server,能夠是任意的瀏覽器。當咱們的腳本啓動瀏覽器後,該瀏覽器就是remote server,它的職責就是等待client(腳本)發送請求並作出相應;數據庫
client端簡單說來就是咱們的測試代碼,咱們測試代碼中的一些行爲,好比打開瀏覽器,轉跳到特定的url等操做是以http請求的方式發送給被測試瀏覽器,也就是remote server;remote server接受請求,並執行相應操做,並在response中返回執行狀態、返回值等信息;json
2、selenium中如何判斷元素是否存在?設計模式
expected_conditions模塊提供了多種校驗方式,經常使用presence_of_element_located(判斷某個元素是否被加到了dom樹裏,並不表明該元素必定可見,若是定位到就返回WebElement)。若是有須要的話,我還能夠自定義expected_conditions方法。瀏覽器
3、selenium中hidden或者是display = none的元素是否能夠定位到?session
能夠定位到,可是不能操做,咱們能夠經過is_displayed()方法來判斷顯示或不顯示,若是想點擊的話,能夠用js去掉dispalay=none的屬性。dom
4、selenium中如何保證操做元素的成功率?也就是說如何保證我點擊的元素必定是能夠點擊的?
測試
經過wait模塊中的WebDriverWait類提供的until或until_not方法與expected_conditions結合使用,進行二次封裝。
5、如何提升selenium腳本的執行速度?
1.少用sleep,儘可能不用implicitly_wait
2.多用顯式等待方法
6、用例在運行過程當中常常會出現不穩定的狀況,也就是說此次能夠經過,下次就沒辦法經過了,如何去提高用例的穩定性?
經過wait模塊中的WebDriverWait類提供的until或until_not方法與expected_conditions結合使用,進行二次封裝。
7、自動化測試的時候是否是須要鏈接數據庫作數據校驗?
UI自動化不須要、接口測試會須要
8、id,name,class,xpath, css selector這些屬性,你最偏心哪種,爲何?
我喜歡用css selector css語法簡潔,定位快(xpath語法長,定位慢,還不穩定)
9、如何去定位頁面上動態加載的元素?
經過wait模塊中的WebDriverWait類提供的until循環的去判斷是否出現了要用的元素
10、如何去定位屬性動態變化的元素?
先去找該元素不變的屬性,要是都變,那就找不變的父元素,用層級定位
11、什麼是page object設計模式?
1.把每一個頁面當成一個頁面對象,對頁面的可操做功能進行封裝
2.測試case經過調用頁面對象的方式來完成case的編寫
3.能夠作到UI操做與case編寫進行分離
12、怎樣去選擇一個下拉框中的value=xx的option?
一、經過兩次click能夠作到
二、經過執行js腳本作到(前提是你能寫出js代碼)
三、selenium提供了select模塊,咱們能夠經過select模塊中的方法定位,好比 index_of、value、text
十3、UI自動化最大的缺陷是什麼?
需求變更大的時候,維護成本大
十4、webdriver能夠用來作接口測試嗎?
不能夠、webdriver是專門作webUI自動化的。