1、selenium中如何判斷元素是否存在? - isElementPresent 2、selenium中hidden或者是display = none的元素是否可以定位到? - 不能 3、selenium中如何保證操作元素的成功率?也就是說如何保證我點選的元素一定是可以點選的? - 添加元素智能等待時間 driver.implicitly_wait(30) - try 方式進行 id,name,clas,x path, css selector 不同方式進行定位,如果第一種失敗可以自動嘗試第二種 -Selenium保證元素成功率是通過元素的定位,當然它的定位方法很多,一定能有合适的。但是在自動化工程的實施過程中,高品質的自動化測試不是隻有測試人員保證的。需要開發人員規範開發習慣,如給頁面元素加上唯一的name,id等,這樣就能大大地提高元素定位的準确性。當然如果開發人員開發不規範,我們在定位元素的時候盡量使用相對位址定位,這樣能減少元素定位受頁面變化的影響。隻要我們元素定位準确,就能保證我的每一個操作符合我的預期 4、如何提高selenium腳本的執行速度? - Selenium腳本的執行速度受多方面因素的影響,如網速,操作步驟的繁瑣程度,頁面加載的速度,以及我們在腳本中設定的等待時間,運作腳本的線程數等。是以不能單方面追求運作速度的,要確定穩定性,能穩定地實作回歸測試才是關鍵。
我們可以從以下幾個方面來提高速度:
一,減少操作步驟,如經過三四步才能打開我們要測試的頁面的話,我們就可以直接通過網址來打開,減少不必要的操作。
二,中斷頁面加載,如果頁面加載的内容過多,我們可以檢視一下加載慢的原因,如果加載的内容不影響我們測試,就設定逾時時間,中斷頁面加載。
三,在設定等待時間的時候,可以sleep固定的時間,也可以檢測某個元素出現後中斷等待也可以提高速度。
四,配置testNG實作多線程。在編寫測試用例的時候,一定要實作松耦合,然後在伺服器允許的情況下,盡量設定多線程運作,提高執行速度。
5、用例在運作過程中經常會出現不穩定的情況,也就是說這次可以通過,下次就沒辦法通過了,如何去提升用例的穩定性? - time.sleep( ) - driver.implicitly_wait(30) - 多用 try 捕捉,處理異常 -此時我們要分析出不穩定的原因,然後有針對性的去解決問題。主要有以下幾個方面 :
一,網速問題:有的時候網頁加載的比較慢,在程式執行的時候要操作的元素沒有顯示出來。這種情況比較常見,運作一次網速好的時候通過了,再運作一次,頁面沒有打開,就不通過了。為了提高穩定性,我們隻能犧牲運作時間了,在經常檢測失敗的元素前加上等待時間,等要操作的元素出現之後再執行下面的操作。
二,Selelnium的原因:Selenium1.0和2.0還是有差別的,有些兒函數在2.0下運作确實有時而有效,時面無效。如果mouseover()函數,就是這種情況, 我們需要避免使用這類的函數。
三,多線程的時候,測試用例間互相影響。雖然多線程的時候運作速度比較快,但是如果用例之間的耦合性沒有設計好,也會影響的,如果用例A先于用例B執行的時候,就會影響到用例B;反之則沒有問題。這種情況,如果你的自動化測試工程打算多線程的時候,提前就要把測試用例測試的耦合度比較松,盡量沒有任何關系,因為多線程的執行順序是不受控制的。 6、你的自動化用例的執行政策是什麼? - 自動化測試用例的執行政策是要看自動化測試的目的,通常有如下幾種政策:
一,自動化測試用例是用來監控的,在此目的下,我們就把自動化測試用例設定成定時執行的,如果每五分鐘或是一個小時執行一次,在jenkins上建立一個定時任務即可。
二,必須回歸的用例。有些兒測試用例,如BVT測試用例,我們在公司産品任何變動上線之前都需要回歸執行。那我們就把測試用例設定成觸發式執行,在jenkins上将我們的自動化測試任務綁定到開發的build任務上。當開發人員在仿真環境上部代碼的時候,我們的自動化測試用例就會被觸發執行。
三,不需要經常執行的測試用例。像全量測試用例,我們沒有必要一直回歸執行,必竟還是有時間消耗的,有些非主要業務線也不需要時時回歸。這類測試用例我們就采用人工執行,在jenkins建立一個任務,需要執行的時候人工去建構即可。 7、什麼是持續內建? - 持續內建源于極限程式設計(XP),是一種軟體實踐,軟體開發過程中內建步驟是一個漫長并且無法預測的過程。內建過程中可能會爆發大量的問題,是以內建過程需要盡可能小而多,實際上持續內建講的是不斷的去做軟體的內建工作。持續內建,最簡單的形式是包括一個監控版本控制(SVN等等)變化的工具。當變化被發覺時,這個工具可以自動的編譯并測試你的應用。 8、自動化測試的時候是不是需要連接配接資料庫做資料校驗? - UI自動化不需要 - 接口測試會需要 9、id,name,class,xpath, css selector這些屬性,你最偏愛哪一種,為什麼? - css 、xpath 幾乎所有的元素都可以定位到 10、如何去定位頁面上動态加載的元素? - 觸發動态加載元素的事件,直至動态元素出現,進行定位 11、如何去定位屬性動态變化的元素? - xpath或者css通過同級、父級、子級進行定位 12、點選連結以後,selenium是否會自動等待該頁面加載完畢? - 會的 13、webdriver client的原理是什麼? - [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中傳回執行狀态、傳回值等資訊;
14、webdriver的協定是什麼? -The WebDriver Wire Protocol 15、啟動浏覽器的時候用到的是哪個webdriver協定? -http 16、什麼是page object設計模式? -http://www.cnblogs.com/tsbc/p/4080301.html 相似功能地方,代碼基本都是一樣的,界面元素換個查找方式,把原來的使用 xpath方式,改為使用 id 查找,需要對每個用例腳本都要改,雖然幾個用例看不出什麼工作量,但是重複findElement的代碼,已經讓我們感到了代碼的笨重。如果某些定位發生了改變,我們就得貫穿整個測試代碼進行調整元素定位,這樣就會導緻我們的腳本在後期,難以維護。是以通過Page Object Model 我們可以建立更加健壯代碼,并減少或者消除重複的測試代碼,進而也能夠提高代碼的可讀性,減少編寫腳本的工作量。Page Object Model的實作,就是通過分離測試對象和測試腳本的抽象來實作的。 17、什麼是page factory設計模式? - http://relevantcodes.com/pageobjects-and-pagefactory-design-patterns-in-selenium/ 18、怎樣去選擇一個下拉框中的value=xx的option? -二次定位 19、如何在定位元素後高亮元素(以調試為目的)? -重置元素屬性,給定位的元素加背景、邊框 20、什麼是斷言? -斷言的英文是assertion,斷言檢查的英文是assertion checking。 -斷言是指定一個程式必須已經存在的狀态的一個邏輯表達式,或者一組程式變量在程式執行期間的某個點上必須滿足的條件。 21、如果你進行自動化測試方案的選型,你會選擇哪種語言,java,js,python還是ruby? -使用自己熟悉的語言 22、page object設定模式中,是否需要在page裡定位的方法中加上斷言? -不需要 23、page object設計模式中,如何實作頁面的跳轉? -get、click (可能有坑) 24、自動化測試用例從哪裡來? -手工用例中抽取 -可以參考自動化用例的執行政策 25、你覺得自動化測試最大的缺陷是什麼? -不穩定 -可靠性 -不易維護 -成本與收益 , 26、什麼是分層測試? -[分層自動化](http://www.cnblogs.com/fnng/p/3653793.html?utm_source=tuicool&utm_medium=referral) 還是自己了解吧 27、webdriver可以用來做接口測試嗎? -有難度,不推薦
28、get和post 的差別?(感覺可能答案不對)
-因為使用GET請求不會産生什麼動作。不會産生動作意味着GET的HTTP請求不會在伺服器上産生任何結果。但是安全方法并不是什麼動作都不産生,這裡的安全方法僅僅指不會修改資訊。POST可能會修改伺服器上的資源的請求。比如CSDN的部落格,使用者送出一篇文章或者一個讀者送出評論是通過POST請求來實作的,因為再送出文章或者評論送出後資源(即某個頁面)不同了,或者說資源被修改了。
兩種請求方式的差別:
1、GET請求,請求的資料會附加在URL之後,以?分割URL和傳輸資料,多個參數用&連接配接。URL的編碼格式采用的是ASCII編碼,而不是uniclde,即是說所有的非ASCII字元都要編碼之後再傳輸。
POST請求:POST請求會把請求的資料放置在HTTP請求包的包體中。上面的item=bandsaw就是實際的傳輸資料。是以,GET請求的資料會暴露在位址欄中,而POST請求則不會。
2、傳輸資料的大小
在HTTP規範中,沒有對URL的長度和傳輸的資料大小進行限制。但是在實際開發過程中,對于GET,特定的浏覽器和伺服器對URL的長度有限制。是以,在使用GET請求時,傳輸資料會受到URL長度的限制。
對于POST,由于不是URL傳值,理論上是不會受限制的,但是實際上各個伺服器會規定對POST送出資料大小進行限制,Apache、IIS都有各自的配置。
3、安全性
POST的安全性比GET的高
29、公司内一直在使用的測試系統(B/S架構)突然不能通路了,需要你進行排查并恢複,說出你的檢查方法
答:一、網站輸入域名直接無法通路,網站之前還正常,突然就無法通路
1. 測試FTP是否正常可以登入,不能登入的直接問空間商那是空間商的問題直接聯系他們。
2. 空間贈送的三級域名是否能夠通路網站打開網站(空間都贈送三級域名),如果也不能通路應該是空間問題。
3. 在電腦的開始菜單運作中輸入cmd,在彈出的黑框中輸入:ping 你的域名;然後回車,如果看不到IP或IP位址與你的主機位址不符,則說明域名解析有誤,是域名的問題得重新解析域名。
二、通路報404錯誤(無法找到該頁)。說明是網站内容都正常是程式出現問題,看看程式是否完整。
三、通路網站出現MySQL Server Error 這個是資料庫連結錯誤,檢視資料庫連接配接檔案和資料庫是不是錯誤。
四、通路網站出現500錯誤。
1. 請登入FTP檢視是否多了異常檔案或丢失檔案,說明網站被侵入了,馬上聯系網站制作進行進行排查故障。
2. 如果空間且FTP程式目錄沒有缺失檔案或剛剛安裝就出現500錯誤,請确認空間已開啟scandir()函數,檢視是不是禁止了這個函數。