差異處

這裏顯示兩個版本的差異處。

連向這個比對檢視

rf:rf:usecustomizedfirefox [2015/11/26 22:34]
tony
rf:rf:usecustomizedfirefox [2023/06/25 09:48]
行 1: 行 1:
-{{tag>​RobotFramework}} 
-====== 使用自己的Firefox做測試 ====== 
-===== Problem ===== 
-在執行Windows上的測試,我們都有固定一包firefox,直接丟到測試系統中,並設定firefox.exe於環境變數PATH中;Linux則是直接使用系統預設的。然而在更新Selenium2Library同時,發現新的selenium在Windows上會強制讀取ProgramFiles內的Firefox。直接參考selenium的firefox_binary.py (v2.46.0): 
-<code python> 
-    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 ""​ 
-</​code>​ 
-鄉民可能會問:​ 那不是直接在系統上裝一個就好了嗎?​ 我只能說:​ 我們的系統不是想裝就可以裝阿! 
-===== How to? ===== 
-我選擇最直接的:​ 修改原始碼,多增加一個自用變數判斷。優先抓取我自訂的系統變數,這變數是宣告Firefox執行檔路徑:​ 
-<code python> 
-    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 ""​  
-</​code>​ 
-在Windows上的batch,可以這樣寫:​ 
-<code sh> 
-@echo off 
-set BASE=%~dp0 
-set TONY_FIREFOX=%BASE%firefox_win\firefox.exe 
-</​code>​ 
-在Linux上的shellscript,可以這樣寫:​ 
-<code sh> 
-#!/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 
-</​code>​ 
-透過Create WebDriver的Keyword,也是可以傳入Firefox的執行路徑。但考量到SeleniumLibrary升級問題,所以我使用最直接的方法。 
-=====    ===== 
----- 
-\\ 
-~~DISQUS~~