wsl2-Ubuntu20.04_selenium2環境搭建流程

荊山守門猿發表於2020-11-17

selenium2環境搭建流程

一,系統環境

作業系統:Ubuntu 20.04 LTS WSL2
系統框架:Drupal8

二,selenium介紹

selenium主要用於web應用程式的自動化測試,還支援所有基於web的管理任務自動化。
selenium經歷了2個版本,selenium1.0和selenium2.0;selenium不是一個單獨的工具,而是由一些外掛、類庫構成,每個組成部分都有其特點和應用場景。
selenium2.0由以下元件構成:
在這裡插入圖片描述

selenium2.0 = selenium1.0 + Webdriver
**Webdirver:**通過原生瀏覽器支援或擴充套件來直接控制瀏覽器,針對各個瀏覽器開發,與瀏覽器緊密整合,支援建立更高階的測試,其還可以利用作業系統級的呼叫,模擬使用者輸入;
**selenium IDE:**嵌入到Firefox瀏覽器中的一個外掛,實現簡單的瀏覽器操作錄製與回放功能,主要用於快速建立BUG及重現指令碼,可轉化為多種語言;
**selenium Gird:**測試輔助工具,利用現有的計算機基礎設施,實現多臺計算上和異構環境中執行測試用例;
**selenium RC:**selenium的核心元件,支援多種不同語言編寫自動化測試指令碼,通過其伺服器作為代理伺服器去訪問應用,達到測試的目的;
**Client Libraries:**Client Libraries庫主要用於編寫測試指令碼,用來控制Selenium Server的庫;
**Selenium Server:**負責控制瀏覽器行為;
Selenium Core(一個JavaScript函式集合):被嵌入到瀏覽器中,通過它實現用程式對瀏覽器進行操作;
Launcher:用於啟動瀏覽器,把Core載入到瀏覽器頁面當中,並把瀏覽器代理設定為Selenium Server的HTTP Proxy;

二,安裝Behat、Mink和mink-selenium2-driver

**Behat:**Behat是PHP的開源行為驅動開發框架。詳情連結
**Mink:**Mink 是開源的 PHP 瀏覽器/控制器 模擬測試工具。Mink 可以模擬 Web 應用和瀏覽器之間的互動,測試 Web 應用的行為是否正確。詳情連結
1.使用Composer安裝Behat及所需的依賴包(Ubuntu20.04安裝並使用Composer):

composer require --dev Behat/Behat dmore/behat-chrome-extension drupal/drupal-extension

2.初始化設定。安裝包後,必須執行init命令,CD到應用程式根目錄,執行以下命令,生成目錄:

vendor/bin/behat --init

在這裡插入圖片描述


3.安裝Mink

composer require --dev behat/mink

安裝成功如圖:

在這裡插入圖片描述

3,建立功能描述檔案目錄及檔案,並配置behat.yml,如下圖(生成的指令碼檔案暫時先忽略,一會執行完用例後才會生成):

在這裡插入圖片描述

4. 新增測試.建立UserContext.feature檔案,並新增一下內容(注意格式和關鍵字大小寫)

在這裡插入圖片描述

5,執行測試用例

vendor/bin/behat   執行所有測試用例
/vendor/bin/behat --config=./behat.yml --suite=user_features   指定測試檔案

執行後會生成UserContext.php檔案,以及方法(方法體需要自己根據業務功能編寫,方法的引數是.feature檔案中步驟中傳遞過來的,如圖)

在這裡插入圖片描述


執行成功

在這裡插入圖片描述

如果順利執行到這裡,那麼Behat和Mink就算整合成功,接下來安裝mink-selenium-driver.
6.執行一下命令

composer require behat/mink-selenium2-driver

安裝成功如圖:

在這裡插入圖片描述

五,安裝Ubuntu20.04桌面

1,下載並安裝VcXSrv X server for Windows,一路預設安裝
.提供給你們一個下載連結
****
在這裡插入圖片描述


在這裡插入圖片描述


在這裡插入圖片描述

可以 Save configuration,儲存設定。
2,在Linux命令列執行一下命令

sudo apt-get update && sudo apt-get upgrade -y
sudo apt-get install xfce4
#安裝成功後,開啟配置檔案
vim ~/.bashrc   

Vim使用教程
3.開啟windows的CMD,輸入ipconfig,檢視WSL的IPv4地址,並將該IP寫入到.bashrc 檔案中如圖:

在這裡插入圖片描述

4.儲存之後,執行如下指令。

source ~/.bashrc   讓配置立即生效

5.雙擊Windows桌面“XLaunch”圖示,開啟服務;
6.Linux端執行:startxfce4,啟動桌面系統;

在這裡插入圖片描述

注意:有個問題就是重啟電腦後,再次啟動時會報錯

在這裡插入圖片描述

因為Ubuntu中的IP每次啟動後都會變,所以之前儲存的IP會無效,之前嘗試過修改為固定IP,但都失敗了,所以就摸索了一個比較繁瑣但是有用的方法,那就是重複第三步,每次啟動桌面前,先修改一下DISPLAY的值,然後再啟動桌面,就解決了,(警告:如果對Linux系統的網路配置不熟悉的小夥伴不要輕易嘗試網上的方法,我差點重灌環境,但如果有有效的方法還請不吝賜教)。

六,安裝火狐瀏覽器

在安裝瀏覽器時要先了解瀏覽器對應的驅動版本和selenium服務版本,本文件使用的**火狐瀏覽器版本為30,selenium服務為****selenium-server-standalone-2.45.0.jar**,因為selenium2中整合了火狐瀏覽器47版本以下的驅動(換句話說,火狐瀏覽器47版本一下不用下載瀏覽器驅動,selenium2中已經整合好了),在這裡給大家一些參考資料,動手能力強的小夥伴可以試試其它版本:
谷歌瀏覽器下載:https://www.chromedownloads.net/chrome64win/
谷歌瀏覽器驅動下載:http://chromedriver.storage.googleapis.com/index.html
谷歌瀏覽器與驅動對應表:https://www.cnblogs.com/yfacesclub/p/8482681.html
火狐瀏覽器下載:http://ftp.mozilla.org/pub/firefox/releases/
火狐瀏覽器驅動下載(47版本以上可以使用):https://github.com/mozilla/geckodriver/tags
火狐瀏覽器與驅動對應表(47版本以上):https://blog.csdn.net/qq_43592253/article/details/107080586
selenium服務下載:http://selenium-release.storage.googleapis.com/index.html
根據以上資料下載對應的瀏覽器版本和驅動,然後開始安裝。
1,window視窗操作Linux檔案,在Linux命令列輸入一下命令後效果如圖:

explorer.exe .
#或者使用CP複製或MV移動命令

cp和mv命令連結

在這裡插入圖片描述

2.將下載的火狐瀏覽器壓縮包,拷貝到/user/bin,並解壓:

tar -zxvf firefox-30.0.tar.bz2

在這裡插入圖片描述

3,建立瀏覽器軟連線

cd /usr/bin   #切換到bin目錄
sudo ln /usr/lib/firefox/firefox firefox -s   #給瀏覽器的二進位制檔案建立一個名為firefox的軟連線(最好寫為瀏覽器的名)
cd /etc/alternatives   #切換到alternatives目錄
rm x-www-browser   #刪除預設的瀏覽器連線
rm gnome-www-browser   #刪除預設的瀏覽器連線
建立新的預設瀏覽器連線
sudo ln /usr/lib/firefox/firefox x-www-browser -s
sudo ln /usr/lib/firefox/firefox gnome-www-browser -s

4.在Linux命令列輸入 firefox 然後回車;
如果瀏覽器開啟,表示配置成功,如不行,關掉ubuntu重啟;
到目前為止環境配置已完成,接下來就執行我們的自動化專案:

六,啟動系統,執行Demo

1,編寫自動登入程式碼(一下程式碼只用於參照,實際情況以實際為準):

#UserContext.feature 功能描述檔案(用例)
Feature: test user login

    Scenario:use username and password
        Given I have a username "admin"
        And I have a password "Dam_123456"
        When I click login
        Then I will go to my home page
<?php
# UserContext.php  指令碼檔案
use Behat\Behat\Context\Context;
use Behat\Mink\Mink;
use Behat\Mink\Session;
use Behat\Mink\Driver\Selenium2Driver;
use Behat\Mink\Driver;

/**
 * Defines application features from the specific context.
 */
class UserContext implements Context
{
    public $driver;
    public $session;
    /**
     * Initializes context.
     *
     * Every scenario gets its own context instance.
     * You can also pass arbitrary arguments to the
     * context constructor through behat.yml.
     */
    public function __construct()
    {
        $caps = array(
            'browserName'       => 'firefox',
            'version'           => '30',
            'platform'          => 'ANY',
            'browserVersion'    => '30',
            'browser'           => 'firefox',
            'name'              => 'Selenium2 Mink Driver',
            'deviceOrientation' => 'selenium2除錯測試',
            'deviceType'        => 'tablet',
            'selenium-version'  => '2.45.0'
        );
        echo "初始化"."\n";
        echo "建立driver物件"."\n";
        $this->driver = new \Behat\Mink\Driver\Selenium2Driver('firefox');
        $this->driver->setDesiredCapabilities($caps);
        echo "建立session物件"."\n";
        $this->session = new Behat\Mink\Session($this->driver);
        echo "跳轉網址"."\n";
        $this->session->visit('http://0.0.0.0/user/login');#IP以實際為準
        echo "放大視窗"."\n";
        $this->driver->maximizeWindow(); 

        // $this->session = new \Behat\Mink\Session($this->driver);  
        // $this->session->visit('http://localhost/user/login');      
        // $this->session->start();
        // $session->session_start();
        // $session->visit;

    }
     /**
     * @Given I have a username :arg1
     */
    public function iHaveAUsername($name)
    {
        if($name!=""){          
            #$this->driver->wait(5000,"等待控制元件");
            $this->driver->findElementXpaths('//*[@id="edit-name"]');
            $this->driver->setValue("//*[@id='edit-name']",$name);
            echo "使用者名稱正確".$name;
        }
    }
    /**
     * @Given I have a password :arg1
     */
    public function iHaveAPassword($pass)
    {
        if($pass!=""){
            $this->driver->findElementXpaths('//*[@id="edit-pass"]');
            $this->driver->setValue('//*[@id="edit-pass"]',$pass);
            echo "密碼正確".$pass;
        }
    }
    /**
     * @When I click login
     */
    public function iClickLogin()
    {
       $this->driver->click('//*[@id="edit-submit"]');
        echo "登入成功!";
    }
    /**
     * @Then I will go to my home page
     */
    public function iWillGoToMyHomePage()
    {
       $Wname =  $this->driver->getValue('/html/body/div/div/div[2]/header/nav/div[1]/a/span');
        echo "展示首頁面!",$Wname;
    }
}

2.cd 到之前下載的selenium服務目錄下,並執行以下命令:

java -jar selenium-server-standalone-2.45.0.jar

在這裡插入圖片描述


2,執行測試用例

vendor/bin/behat --suite=user_features    #--suite 指定測試套件(可不寫,執行全部用例)

在這裡插入圖片描述