1. 程式人生 > >如何使用linux+xvfb+python+rfs+firefox+jenkins實現UI自動化

如何使用linux+xvfb+python+rfs+firefox+jenkins實現UI自動化

  首先說一下背景,在專案中使用windows執行機進行rfs指令碼執行時,遇到兩個問題:

  1、Jenkins的多個slave節點和master的連線通過windows外掛去建立,如果出現slave斷連,無法自動恢復連線且無法及時得到告警;

  2、Windows經常因為系統更新或者執行依賴的軟體、瀏覽器等使得環境變化導致指令碼執行失敗且中斷,雖然有些更新可以通過設定去關閉,但還是會莫名其妙出現自動更新,或者有些提示視窗影響瀏覽器執行;

因此思考是否可以使用linux執行機來跑呢?經過多次嘗試,的確可以實現,不過各有其優缺點,文章後面會簡單總結。

 

以下是所需環境的搭建步驟:

1、安裝xvfb

因現有資源限制,使用的linux虛擬機器都是伺服器版,無視覺化介面;因此安裝一個可以提供瀏覽器執行的虛擬環境,即xvfb。

經過多次嘗試,最終選定了Ubuntu14.04以及Ubuntu16.04,這兩個版本親測可用,安裝方法如下:

apt-get install xvfb

2、安裝python

一般情況下,ubuntu自帶python2.7,可直接使用。

3、安裝rfs環境

方法一,線上安裝,使用如下命令即可

apt-get install robotframework-selenium2Library

或者使用 pip install robotframework-selenium2Library

系統會根據源自動安裝最新版本的依賴包:selenium,robotframework,decorator。

方法二,使用安裝包安裝:

依次下載版本配套的selenium,robotframework,decorator,robotframework-selenium2Library;然後逐個解壓並使用python setup.py **安裝。

4、在Selenium2Library中新增關鍵字

因xvfb需要在執行瀏覽器之前啟動,而啟動方法預設的Selenium2Library庫中是沒有的,我們先自定義兩個關鍵字用來啟動和關閉xvfb;只要在Selenium2Library原有關鍵字中新增以下程式碼即可:

from pyvirtualdisplay import Display;

def Start_Virtual_Display(self):

  self.display = Display(visible=0, size=(1680,1050))

  self.display.start()

 

def Stop_Virtual_Display(self):

  self.display.stop()

5、根據selenium版本安裝firefox以及對應版本的驅動geckodriver

此步簡單,跳過

至此,執行指令碼的環境應該OK了,我們簡單寫一個指令碼測試一下:

Run Keyword If    '${IsVirtualDisplay}' == 'YES'    Start Virtual Display

Open Browser    https://www.baidu.com    firefox

Close All Browsers

Run Keyword If    '${IsVirtualDisplay}' == 'YES'    Stop Virtual Display

以上指令碼寫入test.txt檔案裡,使用以下命令執行:

pybot -v IsVirtualDisplay:YES ../test.txt

執行開始以後會打出日誌以及執行結果,PASS即為成功,失敗會有截圖。

 

經一段時間使用,發現完全可以解決上面遇到的兩個問題,但是同時也有同事反饋:

1、執行失敗時無法通過觀察瀏覽器動作去定位問題;

2、部分元素操作結果和windows不一致,可能原因有很多種,還需深入研究。