自動化測試最新面試題和答案


問題1:Selenium是什么,流行的版本有哪些?

Selenium是基於Web的最流行的UI自動化測試工具。它提供了一組支持多種平台的公開API(例如Linux,Windows,Mac OS X等)。此外,像Google Chrome,Mozilla Firefox,Internet Explorer和Safari等所有現代瀏覽器都可以用來運行Selenium測試。它也涵蓋了Android平台,其中Appium是實現Selenium Webdriver界面的工具,用於移動自動化。

值得注意的是,除了許多后來的小型版本之外,硒還有三個主要版本:

Selenium 1.0或Selenium RC,於2004年初發布,提供了一個使用服務器與瀏覽器交換命令和響應的API集。

Selenium 2.0或Selenium Webdriver,在2011年中推出,並在Selenium功能中引入了一系列重大改進。這些新的API完全取代了服務器組件,並與目標瀏覽器本地交互。

Selenium 3.0,這個版本是在2016年末發布的大版本。它帶來的主要變化是引入Webdriver API的W3C規范,用於瀏覽器自動化。也就是說,每個主要的瀏覽器都會有自己的Webdriver API來實現功能。

問題2:你如何從命令行啟動Selenium RC?

// 簡單的啟動Selenium RC的方法是

java -jar selenium-server.jar

// 在瀏覽器中運行一套Selenese腳本

java -jar selenium-server.jar -htmlSuite

問題3:在我的機器端口4444不是免費的。我怎樣才能使用另一個端口?

//你可以在運行selenium服務器時指定端口為 -

Java -jar selenium-server.jar -port 5555

問題4:什么是Selenium Server,它與Selenium Hub有什么不同?

Selenium Server是使用單個服務器作為測試節點的一個獨立的應用程序。Selenium hub代理一個或多個Selenium的節點實例。一個hub 和多個node被稱為Selenium grid。運行SeleniumServer與在同一主機上用一個hub和單個節點創建de Selenium grid類似。

問題5:你如何從Selenium連接到數據庫?

Selenium是一個Web UI自動化工具。它不提供任何API來建立數據庫連接。這取決於你使用Selenium進行自動化的編程語言。在下面的例子中,我們假設正在使用Java。

一個Connection對象表示與數據庫的連接。當我們使用連接方法連接到一個數據庫時,我們創建了一個連接對象,它代表了與數據庫的連接。單個數據庫可能有一個連接或多個連接,還可能有多個連接到不同的數據庫上。

我們可以使用Connection對象來做以下事情:

  • 創建用於執行SQL語句的Statement,PreparedStatement和CallableStatement對象。

  • 可以幫助我們提交或回滾一個JDBC事務。

  • 如果你想知道連接到的數據庫或數據源信息,Connection對象通過使用DatabaseMetaData就可以收集有關數據庫或數據源的信息。

  • 可以幫助我們關閉數據源。Connection.isClosed() 方法只有在調用了Connection.close()時才返回true 。此方法用於關閉所有連接。

首先我們需要通過使用DriverManager.getConnection()方法,建立與數據庫的連接。這個方法接受一個包含URL的字符串。DriverManager類嘗試查找可以連接到由字符串URL表示的數據庫的驅動程序。每當調用getConnection()方法時,DriverManager類都會檢查可以連接到URL中指定的數據庫的所有已注冊的Driver類的列表。

句法:

String url = "jdbc: odbc: makeConnection";

Connection con = DriverManager.getConnection(url, "userID", "password");

問題6:Selenium RC中定位器方法有哪些?

  1. ID

  2. Name

  3. CSS (Cascade Stylesheet)

  4. XPATH (Relative XPath and Absolute XPath)

  5. Dom

問題7:你如何驗證多個頁面上存在的一個對象?

可以使用下面的Selenium命令來檢查:

assertTrue(selenium.isElementPresent(locator));

問題8:XPath中使用單斜杠和雙斜杠有什么區別?

  • 如果XPath是從文檔節點開始,它將允許創建“絕對”路徑表達式。

例如 “/ html / body / p”匹配所有的段落元素。

  • 如果XPath在文檔中的任意位置開始進行選擇匹配,那么它將允許創建“相對”路徑表達式。

例如 “// p”匹配所有的段落元素。

問題9:如何編寫Selenium IDE / RC的用戶擴展?

用戶擴展(UX)存儲在Selenium IDE或Selenium RC用來激活擴展的單獨文件中。它包含用JavaScript編寫的函數定義。

因為Selenium的核心是用JavaScript開發的,所以要符合原語言的標准規則來創建擴展。要創建一個擴展,我們必須用下面的設計格式來編寫函數。

// 樣例

Selenium.prototype.doFunctionName = function(){

}

函數名稱前面的“do”告訴Selenium這個函數可以被調用為一個步驟命令,而不是作為內部函數或私有函數被調用。

問題10:如何在頁面加載成功后驗證元素的存在?

它可以通過下面的代碼行來實現。

只需一點時間(以秒為單位)來檢查元素,如下所示:

public void waitForElementPresent(String element, int timeout) throws Exception {

for (int second = 0;; second++) {

if (second >= timeout)

fail("Timeout. Unable to find the Specified element" + element);

try {

if (selenium.isElementPresent(element))

break;

} catch (Exception e) {

}

Thread.sleep(1000);

}

}

問題11:你對Selenium Grid有什么了解?它提供了什么功能?

Selenium Grid是一款利用現有計算基礎架構大幅加速Web應用程序功能測試的工具。允許測試者輕松地在多台機器上並行運行多個測試,並且可以在異構環境中運行。

基於優秀的Selenium Web測試工具,Selenium Grid允許測試者並行運行多個Selenium Remote Control實例。更好的是,它集成顯示所有Selenium遠程控制,所以不必擔心實際的基礎設施。Selenium Grid將運行Selenium測試套件所需的時間,縮短到Selenium實例的單個實例運行時間的一小點。

問題12:如何從你的Java Class啟動Selenium服務器?

try {

seleniumServer = new SeleniumServer();

seleniumServer.start();

} catch (Exception e) {

e.printStackTrace();

}

問題13:Selenium中有哪些驗證點?

Selenium主要有三種驗證點 -

  • 檢查頁面標題

  • 檢查某些文字

  • 檢查某些元素(文本框,下拉菜單,表等)

問題14:什么是XPath?什么時候應該在Selenium中使用XPath?

XPath是一種在HTML / XML文檔中定位的方法,可用於識別網頁中的元素。如果沒有與頁面上的元素相關聯的名稱/ ID,或者名稱/ ID的一部分是常量,則必須使用XPath。

絕對路徑用 - / 單斜杠

相對路徑用 - // 雙斜杠

ID,類,名稱也可以用於XPath :

  • //input[@name=’q’]

  • //input[@id=’lst-ib’]

  • //input[@class=’ lst’]

如果id / name / class的一部分是常量 :

  • //input[contains(@id,’lst-ib’)

問題15:什么是Selenium的CSS定位器策略?用例子來解釋。

CSS位置策略可以與Selenium一起使用來定位元素,它使用CSS定位方法,其中 -

絕對路徑用 - (空格符號)

相對路徑用 - >表示

ID,類,名稱也可以用於XPath:

  • css=input[name=’q’]

  • css=input[id=’lst-ib’] or input#lst-ib

  • css=input[class=’lst’] or input.lst

如果id / name / class只有一部分是常量:

  • css=input[id*=’lst-ib’)]

使用內部文本的元素位置策略:

  • css = a:contains(‘log out’)

問題16:當有很多定位器時,如ID、名稱、XPath、CSS定位器,我應該使用哪一個?

如果有唯一的名稱或標識符可用,那么應該使用它們來代替XPath和CSS定位器。如果沒有,那么CSS定位器應該被優先考慮,因為在大多數現代瀏覽器中,它們的評估速度比XPath更快。

問題17:在硒中處理多個彈出窗口的機制是什么?

可以使用命令getWindowHandles()來處理多個彈出窗口。

然后將所有窗口名稱存儲到Set變量中並將其轉換為數組。

接下來,通過使用數組索引,導航到特定的窗口。

driver.switchTo().window(ArrayIndex);

問題18:你如何處理使用Selenium的Ajax控件?

來看一個例子。假如一個文本框是一個Ajax控件,當我們輸入一些文本時,它會顯示自動建議的值。

處理這樣的控件,需要在文本框中輸入值之后,捕獲字符串中的所有建議值;然后,分割字符串,取值就好了。


Part2. WebDriver相關面試問題和答案

問題19:Selenium Webdriver優於Selenium RC的優點是什么?

Selenium RC的架構相當復雜,WebDriver的架構比Selenium RC簡單些。

  • Selenium RC比較慢,因為它使用了另外一個名為Selenium Core的JavaScript程序。相反,WebDriver比Selenium RC更快,因為它直接與瀏覽器對話,並使用瀏覽器自己的引擎來進行控制。

  • 像其他JavaScript代碼一樣,Selenium Core可以訪問禁用的元素。Webdriver以更現實的方式與頁面元素進行交互。

  • Selenium RC的API集已經有所改進,但是仍有經常讓人困惑的冗余部分。WebDriver API更簡單,不包含任何冗余或混淆的命令。

  • Selenium RC無法支持無頭HtmlUnit瀏覽器。它需要一個真正的、可見的瀏覽器來操作。Web Driver可以支持無頭HtmlUnit瀏覽器。

  • Selenium RC內置了測試結果生成器,並自動生成測試結果的HTML文件。Web驅動程序沒有自動生成測試結果文件的內置命令。

問題20:“GET”和“NAVIGATE”方法的主要區別是什么?

Get方法能獲得一個頁面進行加載、或獲取頁面源代碼、或獲取文本,就這三。而Navigate將通過刷新,回退,前進的方式導航。

例如 -如果我們想要前進,並做一些功能,並返回到主頁。

這可以通過調用< navigate()>方法來實現。

driver.get() 方法會等到整個頁面被加載后才可以,而driver.navigate()只是重定向到該網頁,並不會等待。

問題21:隱式等待與顯式等待有什么不同?

隱式等待是設置的全局等待,分為1、頁面加載超時等待 ;2、頁面元素加載超時;3、異步腳本超時。如果是頁面元素超時,設置等待時間,是對頁面中的所有元素設置加載時間。隱式等待是其實可以理解成在規定的時間范圍內,瀏覽器在不停的刷新頁面,直到找到相關元素或者時間結束。

顯式等待只是用於特定搜索的一個計時器。它的可擴展性更強,你可以設置它來等待任何條件。通常情況下,可以使用一些預先構建的條件來等待元素變得可點擊,可見,不可見等,或者只是編寫適合需求的條件。

問題22:你將如何處理Selenium WebDriver中的警報/彈出窗口?

有兩種類型的警報通常被引用。

  • 基於Windows的警報彈出窗口

  • 基於Web的警報彈出窗口

基於Web的警報彈出窗口。

  1. WebDriver為用戶提供了一種使用Alert界面處理這些彈出窗口的非常有效的方法。

  2. void dismiss() - 一旦出現彈出窗口,dismiss()方法就會點擊“Cancel”按鈕。

  3. void accept() - 只要彈出窗口出現,accept()方法就會點擊“Ok”按鈕。

  4. String getText() - getText()方法返回警告框中顯示的文本。

  5. void sendKeys(String stringToSend) - sendKeys()方法將指定的字符串模式輸入到警告框中。

基於Windows的警報彈出窗口。

處理基於windows的彈出窗口總是有點棘手,因為我們知道Selenium是一個自動化測試工具,它只支持Web應用程序測試,也就是說,它不支持基於Windows的應用程序,窗口警報就是其中之一。

  1. Robot class是基於Java的實用程序,它模擬鍵盤和鼠標操作,並可以有效地用於處理基於windows的彈出與鍵盤事件的幫助。

  2. KeyPress和KkeyRelease方法可以分別模擬用戶按下和釋放鍵盤上某個鍵的操作。

問題23:如何使用Selenium WebDriver截圖?

圖片

問題24:如何在WebDriver/如何管理HTTPS中的安全連接錯誤中解決Firefox中的SSL證書問題?

圖片

問題25:如何解決IE中的SSL認證問題?

// 打開瀏覽器后添加下面的命令

driver.navigate().to(“javascript:document.getElementById(‘overridelink’).click()”);

問題26:Selenium WebDriver中的可用定位器是什么?

  1. ID,

  2. Name,名稱

  3. CSS,

  4. XPath,

  5. Class name,

  6. TagName,

  7. LinkText, 鏈接文本

  8. Partial Link Text.部分鏈接文本

問題27:如何處理WebDriver中的AJAX控件?

AJAX代表異步JavaScript和XML。它不依賴於創建有效的XML所需的打開和關閉標簽的額外開銷。大部分時間WebDriver自動處理Ajax控件和調用。如果不能處理的話,可以按照下面的方式來處理。

//Waiting for Ajax Control

WebElement AjaxElement = (new WebDriverWait(driver,

10)).until(ExpectedConditions.presenceOfElementLocated(By.("")));

問題28:如何在標題菜單的子菜單項上執行鼠標移動操作?

應該首先移動菜單標題,然后移至彈出菜單項並單擊它。不要忘記在最后調用actions.perform() 。以下是一些示例Java代碼:

圖片


 

Part3. 一般框架面試問題和答案

 

問題29:大致分類和比較TDD/BDD和DDD框架?

你可能聽說過所有的這些縮寫詞。在這里會簡要地解釋它們,以及它們在系統測試生命周期中如何發揮作用的。

TDD - 測試驅動開發。

也被稱為測試驅動設計,是一個軟件開發的方法,在源代碼上重復進行單元測試。寫測試、看它失敗、然后重構。這個概念是,先編寫測試,然后來檢查我們寫的代碼是否正常工作。每次測試后,重構完成,然后再次執行相同或類似的測試。該過程需要重復多次,直到每個單元在功能上按預期工作。TDD是由XP引入的。

BDD - 行為驅動開發。

行為驅動的開發將TDD的一般技術和原理與領域驅動設計的思想相結合。其目的是幫助人們設計系統(即開發人員)確定合適的測試來編寫測試 - 即反映利益相關者所期望行為的測試。

DDD域驅動的開發。

DDD將業務領域概念映射到軟件工件中。DDD框架提供以下好處:

  • 幫助團隊在業務和IT利益相關者之間建立一個共同的模型

  • 該模型是模塊化的,可擴展的,易於維護,該設計反映了一種商業模式。

  • 它提高了業務領域對象的可重用性和可測試性。

問題30:什么是數據驅動框架?它與關鍵字驅動框架有什么不同?

數據驅動框架。

在這個框架中,測試用例邏輯駐留在測試腳本中。測試數據被分離並保存在測試腳本之外。測試數據是從外部文件(Excel文件)中讀取的,並被加載到測試腳本中的變量中。變量用於輸入值和驗證值。

關鍵字驅動。

關鍵字/表驅動框架需要開發數據表和關鍵字。它們獨立於執行它們的測試自動化工具。可以使用或不使用應用程序來設計測試。在關鍵字驅動的測試中,被測試的應用程序的功能記錄在一個表格中,以及每個測試的分步說明。

問題31:解釋使用TestNG而不是JUnit框架的好處?

TestNG相較於Junit的優勢:

  1. 在JUnit中,我們必須聲明@BeforeClass和@AfterClass,這是JUnit中的一個約束,而在TestNG中沒有像這樣的約束。

  2. TestNG提供了更多的setUp / tearDown級別。1.@ Before/AfterSuite 2.@Before/AfterTest 3.@Before/AfterGroup

  3. TestNG中不需要擴展任何類。

  4. TestNG中沒有方法名稱約束,就像JUnit一樣。

  5. 在TestNG中,我們可以告訴測試一個方法依賴於另一個方法,而在JUnit中這是不可能的。

  6. 測試用例的分組在TestNG中可用,而JUnit中則不可用。執行可以基於組完成。例如,如果你已經定義了許多案例,並通過將2個組分別定義為“離職“與”回歸”隔離。如果你只是想執行“理智”的情況,那就告訴TestNG執行“理智”。TestNG將自動執行屬於“離職”組的案例。

  7. 另外,TestNG支持並行測試用例執行。

問題32:與@Test注釋相關的TestNG參數的目的是什么?

在TestNG中,參數是修改注釋功能的關鍵字。

問題33:可以使用TestNG運行一組測試用例嗎?

是的,TestNG框架支持在測試組的幫助下執行多個測試用例。

它提供了以下選項來運行特定組中的測試用例。

如果想基於回歸測試或冒煙測試等其中一個組來執行測試用例,那么:

@Test(groups = {“regression-tests”, “smoke-tests”})

問題34:WebDriver哪個實現是最快的,為什么?

WebDriver的最快的實現是 HTMLUnitDriver。

原因是HTMLUnitDriver不會在瀏覽器中執行測試。相反,它使用簡單的HTTP請求 - 響應機制來運行測試用例。

這種方法比需要啟動瀏覽器來測試執行的方式要快得多。

問題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時,方法執行速度也可能會變慢。

問題36:可以在Java,Dot Net或Ruby中使用Selenium Grid嗎?

  • 使用Java,可以利用TestNG的並行測試功能來驅動Selenium Grid測試。

  • 使用.Net,可以使用“Gallio”並行執行測試。

  • 使用Ruby,可以使用“DeepTest”來分發測試。


免責聲明!

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



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