自動化測試框架Selenium工作原理


1.Selenium是什么?

  用官網的一句話來講:Selenium automates browsers. That's it!簡單來講,Selenium是一個用於Web應用程序自動化測試工具。Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作瀏覽器一樣。支持的瀏覽器包括IE,Firefox,Safari,Chrome等。Selenium 不僅僅是一個工具或 API,它還組成了許多工具

(以上用了翻譯軟件,有些翻譯不准確,閱讀時請自行斟酌)

  • WebDriver

    如果你開始使用桌面網站或移動網站測試自動化,那么你將使用 webdriverapi。 Webdriver 使用瀏覽器廠商提供的瀏覽器自動化 api 來控制瀏覽器和運行測試。 這就好像是一個真正的用戶在操作瀏覽器。 由於 WebDriver 不需要使用應用程序代碼編譯其 API,因此它不具有侵入性。 因此,您測試的應用程序與實時推送的應用程序相同。

  • IDE

    Ide (集成開發環境)是您用來開發 Selenium 測試用例的工具。 它是一個易於使用的 Chrome 和 Firefox 擴展,並且通常是開發測試用例的最有效的方法。 它使用現有的 Selenium 命令記錄用戶在瀏覽器中的操作,參數由該元素的上下文定義。 這不僅是一個節省時間的方法,也是學習 Selenium 腳本語法的一個很好的方法。

  • Grid

    Selenium Grid 允許您跨不同平台在不同的機器上運行測試用例。 觸發測試用例的控制位於本地端,當觸發測試用例時,它們將由遠程端自動執行。

    在 WebDriver 測試開發之后,您可能需要在多個瀏覽器和操作系統組合上運行測試。 這就是Grid出現的地方。

2.Selenium History

  2004年,誕生了Selenium Core,Selenium Core是基於瀏覽器並且采用JavaScript編程語言的測試工具,運行在瀏覽器的安全沙箱中,設計理念是將待測試產品、Selenium Core和測試腳本均部署到同一台服務器上來完成自動化測試的工作。

​  2005年,Selenium RC誕生,就是selenium1 ,這個時候,Selenium Core其實是Selenium RC的核心。Selenium RC讓待測試產品、Selenium Core和測試腳本三者分散在不同的服務器上。(測試腳本只關心將HTTP請求發送到指定的URL上,selenium本身不需要關心HTTP請求由於什么程序編程語言編寫而成),Selenium RC包括兩部分:一個是Selenium RC Server,一個是提供各種編程語言的客戶端驅動來編寫測試腳本

​   2007年,Webdriver誕生,WebDriver的設計理念是將端到端測試與底層具體的測試工具分隔離,並采用設計模式Adapter適配器來達到目標。WebDriver的API組織更多的是面向對象。

​  2008年,selenium2誕生,selenium2其實是selenium rc和webdriver的合並,合並的根本原因是相互補充各自的缺點

​  2009年,selenium3誕生,這個版本剔除了selenium rc , 主要由 selenium webdriver和selenium Grid組成, 我們日常使用的其實就是selenium webdriver,至於selenium grid是一個分布式實現自動化測試的工具

3.Selenium原理

本文所講的Selenium是指Selenium Webdriver,Selenium WebDriver與RC的功能相同,並且包含原始的1.x綁定。它涉及語言綁定和單個瀏覽器控制代碼的實現。這通常被稱為“WebDriver”,有時也被稱為Selenium 2。Selenium 1.0 + WebDriver = Selenium 2.0

  • WebDriver被設計在一個更簡單和更簡潔的編程接口中,同時解決了Selenium-RC API中的一些限制。

  • 與Selenium1.0相比,WebDriver是一個緊湊的面向對象的API

  • 它更有效地驅動瀏覽器,並克服了Selenium 1.x的限制,這影響了我們的功能測試覆蓋范圍,如文件上傳或下載,彈出框和對話框

    在用Selenium進行自動化測試時必須引入相應jar包,比如selenium-server-standalone-2.46.0.jar,selenium-java-2.47.1.jar,3+以上版本可能有所不同,我們看到有個sever這么一個jar包,這個jar包就是Selenium服務,server端可以是任何瀏覽器作為remote server,職責就是處理client的請求並作出相應操作,client就是我們運行的腳本,response的具體內容根據請求的內容而定,我們以firefox為例,如下圖所示

 

4.Selenium工作過程總結:

  • selenium client(Java等語言編寫的自動化測試腳本)初始化一個service服務,通過Webdriver啟動瀏覽器驅動程序
  • 通過RemoteWebDriver向瀏覽器驅動程序發送HTTP請求,瀏覽器驅動程序解析請求,打開瀏覽器,並獲得sessionid,如果再次對瀏覽器操作需攜帶此id
  • 打開瀏覽器,綁定特定的端口,把啟動后的瀏覽器作為webdriver的remote server
  • 打開瀏覽器后,所有的selenium的操作(訪問地址,查找元素等)均通過RemoteConnection鏈接到remote server,然后使用execute方法調用_request方法通過urlib3向remote server發送請求
  • 瀏覽器通過請求的內容執行對應動作
  • 瀏覽器再把執行的動作結果通過瀏覽器驅動程序返回給測試腳本

5.remote server端的這些功能是如何實現的呢?

  瀏覽器實現了webdriver的統一接口,client就可以通過統一的restful的接口去進行瀏覽器的自動化操作。

  目前webdriver支持ie, chrome, firefox等主流瀏覽器,其主要原因是這些瀏覽器實現了webdriver約定的各種接口。

舉個打開瀏覽器的栗子:

package com.Demo;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class ExampleForFirefox {
    public static void main(String[] args) {

        System.setProperty("webdriver.firefox.bin", "D:\\Program Files\\Mozilla Firefox 24\\firefox.exe");
        WebDriver driver = new FirefoxDriver();
        System.out.println("https://www.cnblogs.com/mrjade/");
        driver.get("https://www.cnblogs.com/mrjade/");
    
    }
}

 

6.附:

各版本Chrome下載地址:https://www.chromedownloads.net/chrome64win/

Selenium Chrome版本與chromedriver兼容版本對照表:https://blog.csdn.net/yoyocat915/article/details/80580066

各版本ChromeDriver下載地址:http://npm.taobao.org/mirrors/chromedriver/ 


免責聲明!

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



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