發布時間:2024-01-24閱讀(15)
Selenium,是一個開源的框架,主要用于做HTML頁面的UI自動化測試。不過,selenium IDE在去年官方已宣告放棄維護了。官網上放著一句話,selenium IDE is Dead。Selenium IDE是火狐瀏覽器的一個插件,是Selenium的一個可視化編輯界面,支持直接錄制腳本,然后轉成其它的語言的腳本執行。不過,錄制的腳本,里面有很多的廢代碼,一般我都不用錄制的,都是直接寫腳本的,所以對我的影響,并不大。
二、2022非常全的selenium面試題及參考答案1 什么是Selenium?
Selenium就是一套專門用于自動化Web瀏覽器的工具。 而已! 你用這個東西來做什么完全取決于你。 主要是用于自動化Web應用程序進行測試,但肯定不僅限于此。 無聊的基于Web的管理任務也可以(也應該!)也是自動化的。Selenium有一些最大的瀏覽器供應商的支持,他們已經采取(或正在采取)步驟使Selenium成為其瀏覽器的本地部分。 它也是無數其他瀏覽器自動化工具,API和框架的核心技術。最新的Selenium版本已經是3.0(2016年10月13日正式release),但是因為是新技術,Selenium3.0的使用范圍還不太廣泛。變動的范圍也不是很大,主要是更傾向于Webdriver,而更多的摒棄了RC。
2 什么是Selenium Webdriver
Webdriver (Selenium2)是一種用于Web應用程序的自動測試工具,它提供了一套友好的API,與Selenium 1(Selenium-RC)相比,Selenium 2的API更容易理解和使用,其可讀性和可維護性也大大提高。Webdriver完全就是一套類庫,不依賴于任何測試框架,除了必要的瀏覽器驅動,不需要啟動其他進程或安裝其他程序,也不必像Selenium 1那樣需要先啟動服務。另外,二者所采用的技術方案也不同。Selenium 1是在瀏覽器中運行 JavaScript來進行測試,而Selenium 2則是通過原生瀏覽器支持或者瀏覽器擴展直接控制瀏覽器。Selenium 2針對各個瀏覽器而開發的,它取代了嵌入到被測Web應用中的 JavaScript。與瀏覽器的緊密集成,支持創建更高級的測試,避免了JavaScript安全模型的限制。除了來自瀏覽器廠商的支持,Selenium 2 還利用操作系統級的調用模擬用戶輸入。
3 S什么是elenium IDE?
Selenium IDE是Selenium腳本的集成開發環境。 它被實現為Firefox擴展(插件),并允許您記錄,編輯和調試測試。
4 常用自動化測試工具機器運行原理,寫出一段元素查找的代碼?
webdriver 原理:
l 每個Selenium 命令,這里指的是所謂的基礎操作,例如,點擊、輸入等,都會創建一條 HTTP 請求, 發送給 Browser WebDriver
l Browser WebDriver 使用一個HTTP Server 監聽和接收HTTP 請求
l HTTP Server 根據協議規則定義這些 Selenium 命令對應的瀏覽器具體操作
l 瀏覽器執行這些操作
l 瀏覽器將執行狀態返回給HTTP Server
l HTTP Server 再將這些狀態信息返回給自動化腳本
5 如何開展自動化測試框架的構建?
我們公司的自動化測試框架主要是有頁面庫,數據驅動,測試腳本,測試報告,持續集成這幾個部分組成的。
頁面對象庫對自動化包括工具(selenium,appium)API 的二次封裝,還有使用二次封裝后的自動化工具類實現的頁面元素封裝(Page Object)然后會給封裝好的頁面設置一個統一入口類。這些之中會有一個頁面元素文件專門存放元素的定位方法。
數據驅動部分主要是測試腳本中使用的數據文件(excel,yaml,txt)以及讀取方法類,如果數據涉及到數據庫,也會把對應的數據讀取方法封裝到這個部分。
測試腳本主要是通過 pytest 測試框架進行編寫的,選擇其的原因主要有其支持 assert 語句斷言,適合復雜的功能測試,執行過程中可以自定義用例執行順序和跳過以及預期,支持重復執行,還可兼容 unittest 編寫的測試用例,最重要的是支持參數化和方便持續集成工具集成。
測試報告主要是通過 pytest 自動生成的Allure 報告,其可讀性可生動的數據表圖比 pytest 報告更能反應測試結果,也可以集成與 Jenkins 中。
持續集成方面主要是通過 Jenkins 進行實現的,目的在于測試腳本的無人值守執行以及自動生成測試報告,方便測試人員能夠省出時間進行更多的功能測試和探索性測試。(通過設置幾個 git,gitlab,mailer,allure, 等功能插件,配置 Allure 報告,默認郵件發送設置。用例腳本主要存放在 gitlab 用例庫中,設置好輪詢策略之后,配置報告發送的目標郵箱,就可以實現持續集成實踐中的測試環節)
6 如何設計自動化測試用例:
l編寫測試腳本之前要編寫測試用例,而且測試用例不能直接使用手工測試的用例。
l自動化的測試用例是一個完整的場景。用戶登錄系統到用戶退出。
l用例之驗證一個功能點。不用試圖登陸后驗證所有的功能在退出
l測試用例盡量只做正向的邏輯驗證。
l用例之間不要產生關聯,相互獨立,也要高內聚,低耦合
l測試用例關注的是功能邏輯的實現,字段無關
l測試用例的上下文必須有一定的順序性,前置條件清晰
l檢查點的設置要側重,全面,靈活
l測試用例對數據的操作要進行還原
l測試用例必須是可回歸的
l用例選擇遵循成本始終,構建場景,目的冒煙回歸,繁瑣功能,主體流程
l用例轉型遵循前置配置,拋異常,步驟驗證,高內聚,關門歸原
7 webdriver 如何開啟和退出一個瀏覽器?
開啟:dr = webdriver.瀏覽器類型() 關閉:dr.quit()
8 什么是自動化測試框架? 測試自動化框架是設置特定產品的自動化規則的集成系統。該系統集成了功能庫,測試數據源,對象詳細信息和各種可重復使用的模塊。這些組件用作需要組裝以代表業務流程的小型構建塊。該框架為測試自動化提供了基礎,并簡化了自動化工作。 也是為自動化軟件測試提供支持的假設框架,概念和工具的主要優點是維護成本低。如果任何測試用例發生變化,那么只需要更新測試用例文件,驅動程序腳本和啟動腳本將保持不變。理想情況下,如果應用程序發生更改,則無需更新腳本。 選擇正確的框架/腳本技術有助于降低成本。與測試腳本相關的成本是由于開發和維護工作。測試自動化期間使用的腳本的方法對成本有影響。通常使用各種框架/腳本技術:線性(程序代碼,可能由使用記錄和播放的工具生成)結構化(使用控制結構 - 通常是“if-else”,“switch”,“for”,“while”條件/語句)
數據驅動(數據存儲在數據庫,電子表格或其他機制中,比如xml) 關鍵字驅動 行為驅動 混合(使用上述兩種或更多種模式)自動化測試框架主要負責: 定義表達期望的格式 創建一個掛鉤或驅動被測應用程序的機制 執行測試 報告結果
9 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來實現功能。
10 你如何從命令行啟動Selenium RC?
// 簡單的啟動Selenium RC的方法是
java -jar selenium-server.jar
// 在瀏覽器中運行一套Selenese腳本
java -jar selenium-server.jar -htmlSuite
11 在我的機器端口4444不是免費的。我怎樣才能使用另一個端口?
//你可以在運行selenium服務器時指定端口為 -
Java -jar selenium-server.jar -port 5555
12 什么是Selenium Server,它與Selenium Hub有什么不同?
Selenium Server是使用單個服務器作為測試節點的一個獨立的應用程序。Selenium hub代理一個或多個Selenium的節點實例。一個hub 和多個node被稱為Selenium grid。運行SeleniumServer與在同一主機上用一個hub和單個節點創建de Selenium grid類似。
13 你如何從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");
14 你如何驗證多個頁面上存在的一個對象?
可以使用下面的Selenium命令來檢查:
assertTrue(selenium.isElementPresent(locator));
15 XPath中使用單斜杠和雙斜杠有什么區別?
如果XPath是從文檔節點開始,它將允許創建“絕對”路徑表達式。
例如 “/ html / body / p”匹配所有的段落元素。
如果XPath在文檔中的任意位置開始進行選擇匹配,那么它將允許創建“相對”路徑表達式。
例如 “// p”匹配所有的段落元素。
16 如何編寫Selenium IDE / RC的用戶擴展?
用戶擴展(UX)存儲在Selenium IDE或Selenium RC用來激活擴展的單獨文件中。它包含用JavaScript編寫的函數定義。
因為Selenium的核心是用JavaScript開發的,所以要符合原語言的標準規則來創建擴展。要創建一個擴展,我們必須用下面的設計格式來編寫函數。
// 樣例
Selenium.prototype.doFunctionName = function(){
}
函數名稱前面的“do”告訴Selenium這個函數可以被調用為一個步驟命令,而不是作為內部函數或私有函數被調用。
17 如何在頁面加載成功后驗證元素的存在?
它可以通過下面的代碼行來實現。
只需一點時間(以秒為單位)來檢查元素,如下所示:
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);}}
18 你對Selenium Grid有什么了解?它提供了什么功能?
Selenium Grid是一款利用現有計算基礎架構大幅加速Web應用程序功能測試的工具。允許測試者輕松地在多臺機器上并行運行多個測試,并且可以在異構環境中運行。
基于優秀的Selenium Web測試工具,Selenium Grid允許測試者并行運行多個Selenium Remote Control實例。更好的是,它集成顯示所有Selenium遠程控制,所以不必擔心實際的基礎設施。Selenium Grid將運行Selenium測試套件所需的時間,縮短到Selenium實例的單個實例運行時間的一小點。
19 如何從你的Java Class啟動Selenium服務器?
try {seleniumServer = new SeleniumServer();seleniumServer.start();} catch (Exception e) {e.printStackTrace();}
20 Selenium中有哪些驗證點?
Selenium主要有三種驗證點:
檢查頁面標題
檢查某些文字
檢查某些元素(文本框,下拉菜單,表等)
§
21 什么是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’)
22 什么是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’)
23 當有很多定位器時,如ID、名稱、XPath、CSS定位器,我應該使用哪一個?
如果有唯一的名稱或標識符可用,那么應該使用它們來代替XPath和CSS定位器。如果沒有,那么CSS定位器應該被優先考慮,因為在大多數現代瀏覽器中,它們的評估速度比XPath更快。
24 在Selenium中處理多個彈出窗口的機制是什么?
可以使用命令getWindowHandles()來處理多個彈出窗口。
然后將所有窗口名稱存儲到Set變量中并將其轉換為數組。
接下來,通過使用數組索引,導航到特定的窗口。
driver.switchTo().window(ArrayIndex);
25 你如何處理使用Selenium的Ajax控件?
來看一個例子。假如一個文本框是一個Ajax控件,當我們輸入一些文本時,它會顯示自動建議的值。
處理這樣的控件,需要在文本框中輸入值之后,捕獲字符串中的所有建議值;然后,分割字符串,取值就好了。
26 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驅動程序沒有自動生成測試結果文件的內置命令。
§
27 “GET”和“NAVIGATE”方法的主要區別是什么?
Get方法能獲得一個頁面進行加載、或獲取頁面源代碼、或獲取文本,就這三。而Navigate將通過刷新,回退,前進的方式導航。
例如 -如果我們想要前進,并做一些功能,并返回到主頁。
這可以通過調用< navigate()>方法來實現。
driver.get() 方法會等到整個頁面被加載后才可以,而driver.navigate()只是重定向到該網頁,并不會等待。
28 隱式等待與顯式等待有什么不同?
隱式等待是設置的全局等待,分為1、頁面加載超時等待 ;2、頁面元素加載超時;3、異步腳本超時。如果是頁面元素超時,設置等待時間,是對頁面中的所有元素設置加載時間。隱式等待是其實可以理解成在規定的時間范圍內,瀏覽器在不停的刷新頁面,直到找到相關元素或者時間結束。
顯式等待只是用于特定搜索的一個計時器。它的可擴展性更強,你可以設置它來等待任何條件。通常情況下,可以使用一些預先構建的條件來等待元素變得可點擊,可見,不可見等,或者只是編寫適合需求的條件。
29 你將如何處理Selenium WebDriver中的警報/彈出窗口?
有兩種類型的警報通常被引用。
基于Windows的警報彈出窗口
基于Web的警報彈出窗口
基于Web的警報彈出窗口。
WebDriver為用戶提供了一種使用Alert界面處理這些彈出窗口的非常有效的方法。
void dismiss() - 一旦出現彈出窗口,dismiss()方法就會點擊“Cancel”按鈕。
void accept() - 只要彈出窗口出現,accept()方法就會點擊“Ok”按鈕。
String getText() - getText()方法返回警告框中顯示的文本。
void sendKeys(String stringToSend) - sendKeys()方法將指定的字符串模式輸入到警告框中。
基于Windows的警報彈出窗口。
處理基于windows的彈出窗口總是有點棘手,因為我們知道Selenium是一個自動化測試工具,它只支持Web應用程序測試,也就是說,它不支持基于Windows的應用程序,窗口警報就是其中之一。
Robot class是基于Java的實用程序,它模擬鍵盤和鼠標操作,并可以有效地用于處理基于windows的彈出與鍵盤事件的幫助。
KeyPress和KkeyRelease方法可以分別模擬用戶按下和釋放鍵盤上某個鍵的操作。
30 如何解決IE中的SSL認證問題?
// 打開瀏覽器后添加下面的命令
driver.navigate().to(“javascript:document.getElementById(‘overridelink’).click()”);
31 Selenium WebDriver中的可用定位器是什么?
ID,
Name,名稱
CSS,
XPath,
Class name,
TagName,
LinkText, 鏈接文本
Partial Link Text.部分鏈接文本
32 如何處理WebDriver中的AJAX控件?
AJAX代表異步JavaScript和XML。它不依賴于創建有效的XML所需的打開和關閉標簽的額外開銷。大部分時間WebDriver自動處理Ajax控件和調用。如果不能處理的話,可以按照下面的方式來處理。
//Waiting for Ajax Control
WebElement AjaxElement = (new WebDriverWait(driver,
10)).until(ExpectedConditions.presenceOfElementLocated(By.("")));
總結:希望此文對你有幫助,如果你正在面試或者在準備面試的小伙伴,我這里有份軟件測試的面試寶典,一共有800道面試題包含了十九個模塊: 軟件測試,liunx,自動化測試,Python基礎,APP測試,接口測試,selenium,性能測試,安全測試,邏輯題,HR面試題,如果你有需要的話,我可以給你!
資料獲取方式:轉發 關注后私信【軟件測試】

歡迎分享轉載→http://www.avcorse.com/read-242744.html
Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號-5 TXT地圖HTML地圖XML地圖