跳到主要內容

使用自己定義的Firefox執行路徑做測試

Problem

在執行Windows上的測試,我們都有固定一包firefox,直接丟到測試系統中,並設定firefox.exe於環境變數PATH中;Linux則是直接使用系統預設的。然而在更新Selenium2Library同時,發現新的selenium在Windows上會強制讀取ProgramFiles內的Firefox。讓我直接參考selenium的firefox_binary.py (v2.46.0):

    def _get_firefox_start_cmd(self):
        """Return the command to start firefox."""
        start_cmd = ""	
        if platform.system() == "Darwin":
            start_cmd = ("/Applications/Firefox.app/Contents/MacOS/firefox-bin")
        elif platform.system() == "Windows":
            start_cmd = (self._find_exe_in_registry() or
                self._default_windows_location())
        elif platform.system() == 'Java' and os._name == 'nt':
            start_cmd = self._default_windows_location()
        else:
            for ffname in ["firefox", "iceweasel"]:
                start_cmd = self.which(ffname)
                if start_cmd is not None:
                    break
            else:
                # couldn't find firefox on the system path
                raise RuntimeError("Could not find firefox in your system PATH." +
                    " Please specify the firefox binary location or install firefox")
        return start_cmd
 
    def _default_windows_location(self):
        program_files = [os.getenv("PROGRAMFILES", r"C:\Program Files"),
                         os.getenv("PROGRAMFILES(X86)", r"C:\Program Files (x86)")]
        for path in program_files:
            binary_path = os.path.join(path, r"Mozilla Firefox\firefox.exe")
            if os.access(binary_path, os.X_OK):
                return binary_path
        return ""

鄉民可能會問: 那不是直接在系統上裝一個就好了嗎? 我只能說: 我們的系統不是想裝就可以裝阿!

How to?

我選擇最直接的: 修改原始碼,多增加一個自用變數判斷。優先抓取我自訂的系統變數,這變數是宣告Firefox執行檔路徑:

    def _get_firefox_start_cmd(self):
        """Return the command to start firefox."""
        start_cmd = self._tony_firefox_location()
        if start_cmd != "":
            return start_cmd		
        if platform.system() == "Darwin":
            start_cmd = ("/Applications/Firefox.app/Contents/MacOS/firefox-bin")
        elif platform.system() == "Windows":
            start_cmd = (self._find_exe_in_registry() or
                self._default_windows_location())
        elif platform.system() == 'Java' and os._name == 'nt':
            start_cmd = self._default_windows_location()
        else:
            for ffname in ["firefox", "iceweasel"]:
                start_cmd = self.which(ffname)
                if start_cmd is not None:
                    break
            else:
                # couldn't find firefox on the system path
                raise RuntimeError("Could not find firefox in your system PATH." +
                    " Please specify the firefox binary location or install firefox")
        return start_cmd
 
    def _tony_firefox_location(self):
        binary_path = os.getenv("TONY_FIREFOX", r"C:\Program Files\Mozilla Firefox\firefox.exe")
        if os.access(binary_path, os.X_OK):
            return binary_path
        return ""	

在Windows上的batch,可以這樣寫:

@echo off
set BASE=%~dp0
set TONY_FIREFOX=%BASE%firefox_win\firefox.exe

在Linux上的shellscript,可以這樣寫:

#!/bin/bash
FULLPATH=`dirname "$0"`/`basename "$0"`
BASE=`readlink -f "$FULLPATH"`
BASEPATH=`dirname $BASE`
FF_HOME=$BASEPATH/firefox_linux
 
TONY_FIREFOX=$FF_HOME/firefox
export TONY_FIREFOX

透過Create WebDriver的Keyword,也是可以傳入Firefox的執行路徑。但考量到SeleniumLibrary升級問題,所以我使用最直接的方法。

留言

這個網誌中的熱門文章

PostgreSQL - Unattended installation on windows

Introduction 要將別人軟體包裝到自己軟體中,不可或缺的東西就是Unattended installation。以Unattended installation來說,我們可以選擇透過Installer的silent mode安裝,也可以透過把目標軟體做成portable的版本。本篇文章分享這兩種方法,教導大家如何將PostgreSQL透過Unattended installation方式安裝到目標系統成為service。 Note. 本篇以PostgreSQL 10.7為例。 Install with installer Tips 安裝程式或反安裝程式的參數,除了可以直接上官網搜尋Installation User Guide以外,也可以直接使用help參數查詢: postgresql- 10.7 - 2 -windows-x64.exe --help Windows安裝程式主要有EnterpriseDB與BigSQL兩種。BigSQL版本安裝元件是透過網路下載且支援參數不如EnterpriseDB版本多,以我們需求來說,我們傾向於使用EnterpriseDB版本。接下來分享給大家安裝與反安裝方法。 Installation @ echo off set INSTALL_DIR =C:\postgres10 set INSTALLER =postgresql- 10.7 - 2 -windows-x64.exe   rem options for installation set SSMDB_SERVICE =postgresql- 10 set MODE =--unattendedmodeui none --mode unattended   set DB_PASSWD =--superpassword postgres set DB_PORT =--serverport 5432   set SERVICE_NAME =--servicename % SSMDB_SERVICE %   set PREFIX =--prefix "%INSTALL_DIR%" set DATA_DIR =--datadir "%INSTALL_DIR%\data"   set OPTIONS =

How to install RIDE on Windows?

Introduction 多年沒在Windows上開發RobotFramework,趁著這次整理一下RIDE安裝方法。 目前RIDE最新版本與Python對應版本如下: (3.6 < python <= 3.11) Install current released version (2.0.8.1) with: pip install -U robotframework-ride 安裝Python 直接到Python官網找尋最新的3.11版本,我使用3.11.9: link 。安裝就是一直下一步而已。 安裝wxPython 每次安裝RIDE最困難的都是wxPython。看了一下 官網 描述,我就姑且相信一下: 接著進入下 載頁面 就有安裝教學。基本上就是到Python目錄下的Scripts直接執行以下command: pip install -U wxPython 安裝RIDE 接著就如RIDE官網所說,執行以下command: pip install -U robotframework-ride 啟動RIDE 直接在相同目錄下執行ride就可以啟動了,你也可以直接在桌面建ride連結,加快下次啟動時間。 沒想到這次這麼順利就安裝完成了。因為我是使用java去啟動robot framework,就不特別講要怎麼使用pip安裝robot framework了。

Hello World!

即將要搬家,因此舊網頁內容將慢慢轉移至Blogger。 如果要存取舊網頁,可以使用以下連結: https://wiki.tonylin.idv.tw/dokuwiki/doku.php