問題1:Selenium是什么,流行的版本有哪些?Selenium是基于Web的最流行的UI自動化測試工具。它提供了一組支持多種平臺的公開API(例如Linux,Windows,Mac OS X等)。此外,像Google Chrome,Mozilla Firefox,Internet Explorer和Safari等所有現(xiàn)代瀏覽器都可以用來運行Selenium測試。它也涵蓋了Android平臺,其中Appium是實現(xiàn)Selenium Webdriver界面的工具,用于移動自動化。 值得注意的是,除了許多后來的小型版本之外,硒還有三個主要版本: Selenium 1.0或Selenium RC,于2004年初發(fā)布,提供了一個使用服務(wù)器與瀏覽器交換命令和響應(yīng)的API集。 Selenium 2.0或Selenium Webdriver,在2011年中推出,并在Selenium功能中引入了一系列重大改進。這些新的API完全取代了服務(wù)器組件,并與目標(biāo)瀏覽器本地交互。 Selenium 3.0,這個版本是在2016年末發(fā)布的大版本。它帶來的主要變化是引入Webdriver API的W3C規(guī)范,用于瀏覽器自動化。也就是說,每個主要的瀏覽器都會有自己的Webdriver API來實現(xiàn)功能。 問題2:你如何從命令行啟動Selenium RC?
問題3:在我的機器端口4444不是免費的。我怎樣才能使用另一個端口?
問題4:什么是Selenium Server,它與Selenium Hub有什么不同?Selenium Server是使用單個服務(wù)器作為測試節(jié)點的一個獨立的應(yīng)用程序。 Selenium hub代理一個或多個Selenium的節(jié)點實例。一個hub 和多個node被稱為Selenium grid。運行SeleniumServer與在同一主機上用一個hub和單個節(jié)點創(chuàng)建de Selenium grid類似。 問題5:你如何從Selenium連接到數(shù)據(jù)庫?Selenium是一個Web UI自動化工具。它不提供任何API來建立數(shù)據(jù)庫連接。這取決于你使用Selenium進行自動化的編程語言。在下面的例子中,我們假設(shè)正在使用Java。 一個Connection對象表示與數(shù)據(jù)庫的連接。當(dāng)我們使用連接方法連接到一個數(shù)據(jù)庫時,我們創(chuàng)建了一個連接對象,它代表了與數(shù)據(jù)庫的連接。單個數(shù)據(jù)庫可能有一個連接或多個連接,還可能有多個連接到不同的數(shù)據(jù)庫上。 我們可以使用Connection對象來做以下事情:
首先我們需要通過使用DriverManager.getConnection()方法,建立與數(shù)據(jù)庫的連接。這個方法接受一個包含URL的字符串。DriverManager類嘗試查找可以連接到由字符串URL表示的數(shù)據(jù)庫的驅(qū)動程序。每當(dāng)調(diào)用getConnection()方法時,DriverManager類都會檢查可以連接到URL中指定的數(shù)據(jù)庫的所有已注冊的Driver類的列表。 句法:
問題6:Selenium RC中定位器方法有哪些?
問題7:你如何驗證多個頁面上存在的一個對象?可以使用下面的Selenium命令來檢查:
問題8:XPath中使用單斜杠和雙斜杠有什么區(qū)別?
例如 “/ html / body / p”匹配所有的段落元素。
例如 “// p”匹配所有的段落元素。 問題9:如何編寫Selenium IDE / RC的用戶擴展?用戶擴展(UX)存儲在Selenium IDE或Selenium RC用來激活擴展的單獨文件中。它包含用JavaScript編寫的函數(shù)定義。 因為Selenium的核心是用JavaScript開發(fā)的,所以要符合原語言的標(biāo)準(zhǔn)規(guī)則來創(chuàng)建擴展。要創(chuàng)建一個擴展,我們必須用下面的設(shè)計格式來編寫函數(shù)。
函數(shù)名稱前面的“do”告訴Selenium這個函數(shù)可以被調(diào)用為一個步驟命令,而不是作為內(nèi)部函數(shù)或私有函數(shù)被調(diào)用。 問題10:如何在頁面加載成功后驗證元素的存在?它可以通過下面的代碼行來實現(xiàn)。 只需一點時間(以秒為單位)來檢查元素,如下所示:
問題11:你對Selenium Grid有什么了解?它提供了什么功能?Selenium Grid是一款利用現(xiàn)有計算基礎(chǔ)架構(gòu)大幅加速Web應(yīng)用程序功能測試的工具。允許測試者輕松地在多臺機器上并行運行多個測試,并且可以在異構(gòu)環(huán)境中運行。 基于優(yōu)秀的Selenium Web測試工具,Selenium Grid允許測試者并行運行多個Selenium Remote Control實例。更好的是,它集成顯示所有Selenium遠(yuǎn)程控制,所以不必?fù)?dān)心實際的基礎(chǔ)設(shè)施。Selenium Grid將運行Selenium測試套件所需的時間,縮短到Selenium實例的單個實例運行時間的一小點。 問題12:如何從你的Java Class啟動Selenium服務(wù)器?
問題13:Selenium中有哪些驗證點?Selenium主要有三種驗證點 -
問題14:什么是XPath?什么時候應(yīng)該在Selenium中使用XPath?XPath是一種在HTML / XML文檔中定位的方法,可用于識別網(wǎng)頁中的元素。如果沒有與頁面上的元素相關(guān)聯(lián)的名稱/ ID,或者名稱/ ID的一部分是常量,則必須使用XPath。 絕對路徑用 - / 單斜杠 相對路徑用 - // 雙斜杠 ID,類,名稱也可以用于XPath :
如果id / name / class的一部分是常量 :
問題15:什么是Selenium的CSS定位器策略?用例子來解釋。CSS位置策略可以與Selenium一起使用來定位元素,它使用CSS定位方法,其中 - 絕對路徑用 - (空格符號) 相對路徑用 - >表示 ID,類,名稱也可以用于XPath:
如果id / name / class只有一部分是常量:
使用內(nèi)部文本的元素位置策略:
問題16:當(dāng)有很多定位器時,如ID、名稱、XPath、CSS定位器,我應(yīng)該使用哪一個?如果有唯一的名稱或標(biāo)識符可用,那么應(yīng)該使用它們來代替XPath和CSS定位器。如果沒有,那么CSS定位器應(yīng)該被優(yōu)先考慮,因為在大多數(shù)現(xiàn)代瀏覽器中,它們的評估速度比XPath更快。 問題17:在硒中處理多個彈出窗口的機制是什么?可以使用命令getWindowHandles()來處理多個彈出窗口。 然后將所有窗口名稱存儲到Set變量中并將其轉(zhuǎn)換為數(shù)組。 接下來,通過使用數(shù)組索引,導(dǎo)航到特定的窗口。
問題18:你如何處理使用Selenium的Ajax控件?來看一個例子。假如一個文本框是一個Ajax控件,當(dāng)我們輸入一些文本時,它會顯示自動建議的值。 處理這樣的控件,需要在文本框中輸入值之后,捕獲字符串中的所有建議值;然后,分割字符串,取值就好了。
問題19:Selenium Webdriver優(yōu)于Selenium RC的優(yōu)點是什么?Selenium RC的架構(gòu)相當(dāng)復(fù)雜,WebDriver的架構(gòu)比Selenium RC簡單些。
問題20:“GET”和“NAVIGATE”方法的主要區(qū)別是什么?Get方法能獲得一個頁面進行加載、或獲取頁面源代碼、或獲取文本,就這三。而Navigate將通過刷新,回退,前進的方式導(dǎo)航。 例如 -如果我們想要前進,并做一些功能,并返回到主頁。 這可以通過調(diào)用< navigate()>方法來實現(xiàn)。 driver.get() 方法會等到整個頁面被加載后才可以,而driver.navigate()只是重定向到該網(wǎng)頁,并不會等待。 問題21:隱式等待與顯式等待有什么不同?隱式等待是設(shè)置的全局等待,分為1、頁面加載超時等待 ;2、頁面元素加載超時;3、異步腳本超時。如果是頁面元素超時,設(shè)置等待時間,是對頁面中的所有元素設(shè)置加載時間。隱式等待是其實可以理解成在規(guī)定的時間范圍內(nèi),瀏覽器在不停的刷新頁面,直到找到相關(guān)元素或者時間結(jié)束。 顯式等待只是用于特定搜索的一個計時器。它的可擴展性更強,你可以設(shè)置它來等待任何條件。通常情況下,可以使用一些預(yù)先構(gòu)建的條件來等待元素變得可點擊,可見,不可見等,或者只是編寫適合需求的條件。 問題22:你將如何處理Selenium WebDriver中的警報/彈出窗口?有兩種類型的警報通常被引用。
基于Web的警報彈出窗口。
基于Windows的警報彈出窗口。 處理基于windows的彈出窗口總是有點棘手,因為我們知道Selenium是一個自動化測試工具,它只支持Web應(yīng)用程序測試,也就是說,它不支持基于Windows的應(yīng)用程序,窗口警報就是其中之一。
問題23:如何使用Selenium WebDriver截圖?問題24:如何在WebDriver/如何管理HTTPS中的安全連接錯誤中解決Firefox中的SSL證書問題?問題25:如何解決IE中的SSL認(rèn)證問題?
問題26:Selenium WebDriver中的可用定位器是什么?
問題27:如何處理WebDriver中的AJAX控件?AJAX代表異步JavaScript和XML。它不依賴于創(chuàng)建有效的XML所需的打開和關(guān)閉標(biāo)簽的額外開銷。大部分時間WebDriver自動處理Ajax控件和調(diào)用。如果不能處理的話,可以按照下面的方式來處理。
問題28:如何在標(biāo)題菜單的子菜單項上執(zhí)行鼠標(biāo)移動操作?應(yīng)該首先移動菜單標(biāo)題,然后移至彈出菜單項并單擊它。不要忘記在最后調(diào)用actions.perform() 。以下是一些示例Java代碼:
問題29:大致分類和比較TDD/BDD和DDD框架?你可能聽說過所有的這些縮寫詞。在這里會簡要地解釋它們,以及它們在系統(tǒng)測試生命周期中如何發(fā)揮作用的。 TDD - 測試驅(qū)動開發(fā)。 也被稱為測試驅(qū)動設(shè)計,是一個軟件開發(fā)的方法,在源代碼上重復(fù)進行單元測試。寫測試、看它失敗、然后重構(gòu)。這個概念是,先編寫測試,然后來檢查我們寫的代碼是否正常工作。每次測試后,重構(gòu)完成,然后再次執(zhí)行相同或類似的測試。該過程需要重復(fù)多次,直到每個單元在功能上按預(yù)期工作。TDD是由XP引入的。 BDD - 行為驅(qū)動開發(fā)。 行為驅(qū)動的開發(fā)將TDD的一般技術(shù)和原理與領(lǐng)域驅(qū)動設(shè)計的思想相結(jié)合。其目的是幫助人們設(shè)計系統(tǒng)(即開發(fā)人員)確定合適的測試來編寫測試 - 即反映利益相關(guān)者所期望行為的測試。 DDD域驅(qū)動的開發(fā)。 DDD將業(yè)務(wù)領(lǐng)域概念映射到軟件工件中。DDD框架提供以下好處:
問題30:什么是數(shù)據(jù)驅(qū)動框架?它與關(guān)鍵字驅(qū)動框架有什么不同?數(shù)據(jù)驅(qū)動框架。 在這個框架中,測試用例邏輯駐留在測試腳本中。測試數(shù)據(jù)被分離并保存在測試腳本之外。測試數(shù)據(jù)是從外部文件(Excel文件)中讀取的,并被加載到測試腳本中的變量中。變量用于輸入值和驗證值。 關(guān)鍵字驅(qū)動。 關(guān)鍵字/表驅(qū)動框架需要開發(fā)數(shù)據(jù)表和關(guān)鍵字。它們獨立于執(zhí)行它們的測試自動化工具。可以使用或不使用應(yīng)用程序來設(shè)計測試。在關(guān)鍵字驅(qū)動的測試中,被測試的應(yīng)用程序的功能記錄在一個表格中,以及每個測試的分步說明。 問題31:解釋使用TestNG而不是JUnit框架的好處?TestNG相較于Junit的優(yōu)勢:
問題32:與@Test注釋相關(guān)的TestNG參數(shù)的目的是什么?在TestNG中,參數(shù)是修改注釋功能的關(guān)鍵字。 問題33:可以使用TestNG運行一組測試用例嗎?是的,TestNG框架支持在測試組的幫助下執(zhí)行多個測試用例。 它提供了以下選項來運行特定組中的測試用例。 如果想基于回歸測試或冒煙測試等其中一個組來執(zhí)行測試用例,那么:
問題34:WebDriver哪個實現(xiàn)是最快的,為什么?WebDriver的最快的實現(xiàn)是 HTMLUnitDriver。 原因是HTMLUnitDriver不會在瀏覽器中執(zhí)行測試。相反,它使用簡單的HTTP請求 - 響應(yīng)機制來運行測試用例。 這種方法比需要啟動瀏覽器來測試執(zhí)行的方式要快得多。 問題35:是否可以在Selenium 2.0中使用Selenium RC API?是的,可以用Selenium 2.0來模擬Selenium 1.0 API(即RC)。但并不是所有的Selenium 1.0方法都支持。 為了達到這個目的,需要從WebDriver獲取Selenium實例并使用Selenium方法。 在Selenium 2.0中模擬Selenium 1.0時,方法執(zhí)行速度也可能會變慢。 問題36:可以在Java,Dot Net或Ruby中使用Selenium Grid嗎?
|
|
來自: _bolo > 《Interview》