1. 程式人生 > 其它 >Web自動化學習(2)

Web自動化學習(2)

問題1:Selenium是什麼,流行的版本有哪些?
是一個開源的web自動化測試的框架,支援多種程式語言,支援跨瀏覽器平臺進行測試。
Selenium 1.0或Selenium RC
Selenium 2.0或Selenium Webdriver
Selenium 3.0

問題2:你如何從命令列啟動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中定位器方法有哪些?
ID Name CSS XPATH 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’)

問題17:在處理多個彈出視窗的機制是什麼?

可以使用命令getWindowHandles()來處理多個彈出視窗。
然後將所有視窗名稱儲存到Set變數中並將其轉換為陣列。
接下來,通過使用陣列索引,導航到特定的視窗。
driver.switchTo().window(ArrayIndex);

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

來看一個例子。假如一個文字框是一個Ajax控制元件,當我們輸入一些文字時,它會顯示自動建議的值。
處理這樣的控制元件,需要在文字框中輸入值之後,捕獲字串中的所有建議值;然後,分割字串,取值就好了。

問題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將通過重新整理,回退,前進的方式導航。

Partial Link Text.部分連結文字這可以通過呼叫< navigate()>方法來實現。
driver.get() 方法會等到整個頁面被載入後才可以,而driver.navigate()只是重定向到該網頁,並不會等待。

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

隱式等待是設定的全域性等待,分為1、頁面載入超時等待 ;2、頁面元素載入超時;3、非同步指令碼超時。如果是頁面元素超時,設定等待時間,是對頁面中的所有元素設定載入時間。隱式等待是其實可以理解成在規定的時間範圍內,瀏覽器在不停的重新整理頁面,直到找到相關元素或者時間結束。

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

問題22:如何解決IE中的SSL認證問題?
// 開啟瀏覽器後新增下面的命令
driver.navigate().to(“javascript:document.getElementById(‘overridelink’).click()”);

問題23:如何處理WebDriver中的AJAX控制元件?
AJAX代表非同步JavaScript和XML。它不依賴於建立有效的XML所需的開啟和關閉標籤的額外開銷。大部分時間WebDriver自動處理Ajax控制元件和呼叫。如果不能處理的話,可以按照下面的方式來處理。

//Waiting for Ajax Control

WebElement AjaxElement = (new WebDriverWait(driver,

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

問題24:如何在標題選單的子選單項上執行滑鼠移動操作?
應該首先移動選單標題,然後移至彈出選單項並單擊它。不要忘記在最後呼叫actions.perform() 。

問題25:什麼是資料驅動框架?它與關鍵字驅動框架有什麼不同?
資料驅動框架。
在這個框架中,測試用例邏輯駐留在測試指令碼中。測試資料被分離並儲存在測試指令碼之外。測試資料是從外部檔案(Excel檔案)中讀取的,並被載入到測試指令碼中的變數中。變數用於輸入值和驗證值。
關鍵字驅動。
關鍵字/表驅動框架需要開發資料表和關鍵字。它們獨立於執行它們的測試自動化工具。可以使用或不使用應用程式來設計測試。在關鍵字驅動的測試中,被測試的應用程式的功能記錄在一個表格中,以及每個測試的分步說明。

問題26:解釋使用TestNG而不是JUnit框架的好處?
TestNG相較於Junit的優勢:
在JUnit中,我們必須宣告@BeforeClass和@AfterClass,這是JUnit中的一個約束,而在TestNG中沒有像這樣的約束。
TestNG提供了更多的setUp / tearDown級別。1.@ Before/AfterSuite 2.@Before/AfterTest 3.@Before/AfterGroup
TestNG中不需要擴充套件任何類。
TestNG中沒有方法名稱約束,就像JUnit一樣。
在TestNG中,我們可以告訴測試一個方法依賴於另一個方法,而在JUnit中這是不可能的。

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

另外,TestNG支援並行測試用例執行。

問題27:與@Test註釋相關的TestNG引數的目的是什麼?

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

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

是的,TestNG框架支援在測試組的幫助下執行多個測試用例。
它提供了以下選項來執行特定組中的測試用例。
如果想基於迴歸測試或冒煙測試等其中一個組來執行測試用例,那麼:
@Test(groups = {“regression-tests”, “smoke-tests”})