自動化測試框架源代碼解析

鏈接: http://pan.baidu.com/s/1hrtgFAk   密碼: 8zhd

 if env.threadlocal.TESTING_BROWSER.upper() == 'FIREFOX':
        fp = FirefoxProfile()
        fp.native_events_enabled = False
        
        if env.FIREFOX_BINARY == '':
            try:
                env.THREAD_LOCK.acquire()
                browser = webdriver.Firefox(firefox_profile=fp)
            except:
                if isinstance(env.RESERVED_FIREFOX_BINARY, str) and env.RESERVED_ FIREFOX_BINARY != "":
                    browser = webdriver.Firefox(firefox_profile=fp, 
                                                firefox_binary=FirefoxBinary(firefox_path=env.RESERVED_FIREFOX_BINARY))
                else:
                    try:
                        log.step_warning("try to start firefox again!")
                        time.sleep(20)
                        browser = webdriver.Firefox(firefox_profile=fp)
                    except:
                        log.handle_error()
                        return False
            finally:
                env.THREAD_LOCK.release()
                
        else:
            browser = webdriver.Firefox(firefox_profile=fp, 
                                            firefox_binary=FirefoxBinary(firefox_path=env.FIREFOX_BINARY))

這裏主要涉及到了python對於Firefox的操作。

首先是FirefoxProfile()這個軟件包裏面,定義的是如何去選取firefox的profile文件。包含了一些插件跟拓展。如果沒有的話。Firefox是默認自己組織一個臨時的profile然後去運行Firefox

接着是FirefoxBniary()這個軟件包。這個接收一個path的參數。定義的是firefox.exe的路徑。

b=FirefoxProfile("D:\Soft\Firefox\Profiles\V6")
#這裏用的是41版本的火狐瀏覽器
c=FirefoxBinary(firefox_path="D:\\Soft\\Firefox\\Firefox\\firefox.exe")
a=webdriver.Firefox(firefox_profile=b,firefox_binary=c)

在我的機器上有一個安裝版的firefox。一個綠色版的firefox,版本分別爲43 和41.當我設置了FirefoxBinary()以後。調用的是41版本的Firefox。

接着。我們可以啓動以下代碼。看一下selenium關於python的代碼:

python -m pydoc -p 1234    #在瀏覽器輸入localhost:1234

可以分別看到這兩個裏面還有一些方法:

FirefoxProfile:add_extension(self,extension="xxx.xpi")  √

                         set_preference(self,key,value)   不會用

                         set_proxy(self,proxy)                  不會用

                         update_preference(self)             不會用

FirefoxBinary:kill(self)

                         launch_browser(self,profile)

                         which(self,filename)   通過搜索所給的filename,返回一個完整的合格的path

當然,以上那些方法就用了add_extension(),其他的都還不會用,也沒用到。


接下去看到的是關於IE和Chrome的調用。需要用到驅動。

elif env.threadlocal.TESTING_BROWSER.upper() == 'CHROME':
        if env.DRIVER_OF_CHROME == '':
            print ('DRIVER_OF_CHROME is empty.')
            return False
        
        os.environ['webdriver.chrome.driver'] = env.DRIVER_OF_CHROME
        browser = webdriver.Chrome(executable_path=env.DRIVER_OF_CHROME)
    
    
    elif env.threadlocal.TESTING_BROWSER.upper() == 'IE':
        if env.DRIVER_OF_IE == '':
            print ('DRIVER_OF_IE is empty.')
            return False
        #殺死進程
        os.popen('TASKKILL /F /IM IEDriverServer.exe')
        
        dc = DesiredCapabilities.INTERNETEXPLORER.copy()
        
        dc['nativeEvents'] = False
        dc['acceptSslCerts'] = True
        
        os.environ['webdriver.ie.driver'] = env.DRIVER_OF_IE
        
        browser = webdriver.Ie(executable_path=env.DRIVER_OF_IE, 
                                   capabilities=dc)

這裏面有有一個python中的os模塊。使用

dir(os)
help(os.environ)

environ是一個字符串所對應環境的映像對象.通常用於跨平臺.

os.environ["webdriver.chromedriver.exe"] #相當於把這個參數加入到了環境變量中。這樣就 相當於一個全局的變量了

接下去是關於如何啓動chrome瀏覽器:

import os
os.environ["webdriver.chromedriver.exe"]="D:\\chromedriver.exe"
browser=webdriver.Chrome(executable_path="D:\\chromedriver.exe")

os.popen(" ")可以返回內容,例如:

t=os.popen("ping 198.123.1.1")
print t.read()

這裏IE會去殺死進程,爲什麼chrome不去殺死chromedriver的進程?難道是IE的特殊性?

啓動IE:

os.environ['webdriver.IEdriver']="D:\\IEDriverServer"
b=webdriver.Ie(executable_path="D:\\IEDriverServer")


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章