1、selenium中如何判斷元素是否存在?
答:isElementPresent
2、selenium中hidden或者是display = none的元素是否可以定位到?
答:不可以定位到
3、selenium中如何保證操作元素的成功率?也就是說如何保證我點擊的元素一定是可以點擊的?
答:(1)添加元素智能等待時間:driver.implicitly_wait(30)
(2)try 方式進行 id,name,clas,x path, css selector 不同方式進行定位,如果第一種失敗可以自動嘗試第二種
(3)Selenium保證元素成功率是通過元素的定位,當然它的定位方法很多,一定能有合適的,但是在自動化工程的實施過程中,高質量的自動化測試不是測試人員所能保證的,是需要開發人員規范開發習慣,如給頁面元素加上唯一的name,id等,這樣就能大大地提高元素定位的准確性。當然如果開發人員開發不規范,我們在定位元素的時候盡量使用相對地址定位,這樣能減少元素定位受頁面變化的影響。只要我們元素定位准確,就能保證每一個操作符合預期結果
4、如何提高selenium腳本的執行速度?
答:Selenium腳本的執行速度受多方面因素的影響,如網速,操作步驟的繁瑣程度,頁面加載的速度,以及我們在腳本中設置的等待時間,運行腳本的線程數等。所以不能單方面追求運行速度的,要確保穩定性,能穩定地實現回歸測試才是最關鍵。
1)我們可以從以下幾個方面來提高速度:
一、減少操作步驟,如經過三四步才能打開我們要測試的頁面的話,我們就可以直接通過網址來打開,減少不必要的操作。
二、中斷頁面加載,如果頁面加載的內容過多,我們可以查看一下加載慢的原因,如果加載的內容不影響我們測試,就設置超時時間,中斷頁面加載。
三、在設置等待時間的時候,可以用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實現原理:通過研究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設計模式?
答:Page Objects是指UI界面上用於與用戶進行交互的對象。它可以指整個頁面,也可以指Page上的某個區域。Page Objects是你的test code的交互對象,是對實際UI的一種抽象模型化。通過Page Objects可以減少重復代碼的編寫,例如,很多頁面都有同樣的header,footer,navigator等部分,如果對這些進行抽象,只寫一次就可以在其他地方通用了。
17、怎樣去選擇一個下拉框中的value=xx的option?
答:需要二次定位
18、如何在定位元素后高亮元素(以調試為目的)?
答:重置元素屬性,給定位的元素加背景、邊框
19、什么是斷言?
答:斷言的英文是assertion,斷言檢查的英文是assertion checking。斷言是指定一個程序必須已經存在的狀態的一個邏輯表達式,或者一組程序變量在程序執行期間的某個點上必須滿足的條件。
20、如果你進行自動化測試方案的選型,你會選擇哪種語言,java,js,python還是ruby?
答:使用自己熟悉的語言
21、page object設置模式中,是否需要在page里定位的方法中加上斷言?
答:不需要
22、page object設計模式中,如何實現頁面的跳轉?
答:get、click (可能有坑)
23、自動化測試用例從哪里來?
答:手工用例中抽取出來,可以參考自動化用例的執行策略
24、你覺得自動化測試最大的缺陷是什么?
答:不穩定、可靠性、不易維護、成本與收益不成正比
25、什么是分層測試?
答:UI測試、集成/接口測試、單元測試這些都可以算做分層測試
26、webdriver可以用來做接口測試嗎?
答:有一定難度,不推薦做接口測試
27、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的高
28、公司內一直在使用的測試系統(B/S架構)突然不能訪問了,需要你進行排查並恢復,說出你的檢查方法有哪些?
答:
一、網站輸入域名直接無法訪問,網站之前還正常,突然就無法訪問
1)測試FTP是否正常可以登錄,不能登錄的直接問域名商,是域名商的問題直接聯系他們。
2)空間贈送的三級域名是否能夠訪問網站打開網站(空間都贈送三級域名),如果也不能訪問應該是空間問題。
3)在電腦的開始菜單運行中輸入cmd,在彈出的黑框中輸入:ping 你的域名;然后回車,如果看不到IP或IP地址與你的主機地址不符,則說明域名解析有誤,是域名的問題得重新解析域名。
二、訪問報404錯誤(無法找到該頁),說明是網站內容都正常是程序出現問題,看看程序是否完整。
三、訪問網站出現MySQL Server Error 這個是數據庫鏈接錯誤,查看數據庫連接文件和數據庫是不是出現錯誤。
四、訪問網站出現500錯誤。1. 請登錄FTP查看是否多了異常文件或丟失文件,說明網站被侵入了,馬上聯系網站制作商進行進行排查故障。2. 如果空間且FTP程序目錄沒有缺失文件或剛剛安裝就出現500錯誤,請確認空間已開啟scandir()函數,查看是不是禁止了這個函數。
在學習完Selenium的大部分接口或者方法之后,你可能會去面試自動化測試,主要是Selenium的自動化測試。下面這些問題總結,可能會對你有所幫助。
1. 什么是Selenium?
Selenium是一個開源的web自動化測試框架,主要是基於web uI的自動化測試。現在的版本,逐步增加了對移動端的自動化測試。Selenium支持多種語言進行開發自動化測試腳本,有Java,python,C#,Javascript等等。Selenium支持跨瀏覽器平台測試。
2.Selenium是否支持桌面應用軟件的自動化測試。
Selenium不支持桌面軟件的自動化測試,Selenium是根據網頁元素的屬性才定位元素,而其他桌面軟件自動化測試工具是根據桌面元素的位置來定位元素,當然現在也有根據桌面元素的屬性來定位的。
3.Selenium是否支持用例的執行的引擎。
引擎好比就是一個發動機。Selenium是沒有關於測試用例和測試套件管理和執行的模塊。我們需要借助第三方單元測試框架來實現用例管理和用例的執行。例如Java中有Junit或者testNG,Python中有unittest單元測試框架。
4.Seleinum是否有讀取excel文件的庫
沒有,這里需要用到第三方工具。例如Apache POI插件。
5.Selenium有哪些組件?
最早的有Selenium IDE,IDE只支持安裝在fiefox上一個插件,支持錄制自動化腳本。還有
remote RC,和Grid 和webdriver。我們一般最重要的就是使用webdriver。
6.Selenium有什么限制或者缺陷
除了基於web的軟件和mobile的程序,selenium不支持桌面軟件自動化測試。軟件測試報告,和用例管理只能
依賴第三方插件,例如Junit/TestNG和unittest。由於它是免費的軟件,所以沒有供應商去提供支持和服務,有問題,只能求助selenium社區。還有一個就是,selenium入門門檻可能有點高,需要具備一定編程語言基礎的才能玩轉。
7.在selenium中,有哪些不同定位元素方法
ID/className/Name/LinkText/PartialLinkText/Xpath/CSS selector
8.什么是imlicitlyWait
imlicitlyWait是隱式等待,一般在查找元素的時候使用。例如,我設置一個查找元素最大時間為10秒,使用了
imlicitlyWait后,如果第一次沒有找到元素,會在10秒之內不斷循環去找元素,知道超過10秒,報超時錯誤。
9.什么是expliciteWait
這個是顯式等待,就是不管如何都是要等10秒,如果你設置了10秒超時,這個是selenium2的功能
在selenium3中,我暫時沒有找到這個接口。
10.什么是線程等待
有時候,我們需要強制設置線程等待,Thread.sleep(2000),driver這個實例,就是當前的線程。
11.什么是pollingEvery
這個是設置個一段時間就去做一件事,例如下面設置隔一秒就去查找元素一次。
WebDriverWait wait = new WebDriverWait(driver,30);
wait.pollingEvery(1, TimeUnit.SECONDS);
driver.findElement(By.xpath("xxxx"));
