自動化測試入門,總結一下安裝selenium、python以及配置webdriver遇到的問題:
准備工作:
1、下載火狐瀏覽器並安裝插件selenium IDE、Firebug~~
2、下載安裝python,並配置環境變量
3、下載setuptools(python基礎工具包)並解壓,通過cmd命令進入該解壓目錄,執行文件setup.py
E:\Software\python\setuptools-28.8.0>python setup.py install
網上很多資料都說執行ez_setup.py文件,然后本人下載的28.8.0版本的並沒有ez_setup.py文件,於是就嘗試執行setup.py發現可以運行~
4、下載pip(python的安裝包管理工具)並解壓,通過cmd命令進入該解壓目錄,執行文件setup.py
E:\Software\python\pip-9.0.1>python setup.py install
然后切換到python目錄Scripts文件夾下執行 D:\Programs\Python\Python35-32\Scripts>easy_install pip
5、下載selenium3
可直接使用cmd命令下載,在python的安裝路徑scripts文件下運行:
D:\Programs\Python\Python35-32\Scripts> pip install -U selenium
或者直接下載selenium,並解壓文件夾將整個目錄放到D:\Programs\Python\Python35-32\Lib\site-packages目錄下。
這里我下載的selenium3.0.1版本解壓后文件夾名是“selenium-3.0.1”,然后嘗試以下腳本:
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
browser.quit()
報錯ImportError: No module named “selenium”。解決辦法:將“selenium-3.0.1”文件夾重命名為“selenium”,如果不改文件夾名稱,導入包名的時候就必須用文件夾的名字,即from selenium-3.0.1 import webdriver而“-”為非法字符也會報錯,可以使用selenium3.0.1這種命名,總之名稱要相同才能識別。
重命名為selenium后繼續運行~
接着是webdriver報錯selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.這里如果你的火狐瀏覽器安裝不是默認路徑,需要修改Python的兩個文件配置(即path改為firefox的安裝路徑),
D:\Programs\Python\Python35-32\Lib\site-packages\selenium-3.0.1-py3.5.egg\selenium\webdriver\firefox的
webdriver.py文件中修改為
def_init_(self,firefox_profile=None,firefox_binary=FirefoxBinary("D:/Program Files (x86)/Mozilla Firefox/firefox.exe")
Firefox_binary.py文件中修改為
def_init_(self,firefox_path="D:/Program Files (x86)/Mozilla Firefox/firefox.exe",log_file=None);
然后再次嘗試,仍然報錯,網上查資料說selenium 3.x開始,webdriver/firefox/webdriver.py的__init__中,executable_path="geckodriver";而2.x是executable_path="wires",firefox 47以上版本,需要下載第三方插件geckodriver,下載到任意目錄,解壓后將該路徑加入到PC的path。
仍然報錯!!!嘗試直接把geckodriver.exe放到python的根目錄下,由於python的路徑已經配置過且成功了,所以geckodriver的路徑就不用單獨配置了,這么一試調用的瀏覽器果然打開了!但是仍然報錯WebDriverException:Unsupported Marionette protocol version 2 , required 3 ,這個報錯在網上幾乎查不到資料,折騰了兩天,做了無數的嘗試:
把火狐瀏覽器卸載重裝,安裝至默認路徑(webdriver.py和firefox_binary.py文件恢復原來的代碼)。
python也卸載重裝,安裝至默認路徑(本人原來的python是很久以前安裝的,那時候也不懂里面的任何含義,重新安裝時發現python3.5.2可以自動配置環境變量,且安裝時可以勾選pip、setuptools等工具包,后面這些工具的安裝就都免了,但是selenium還是需要手動安裝或者用cmd命令下載安裝,不要忘了geckodriver.exe放到python路徑下)
降低火狐版本(降低火狐版本要注意把火狐的自動更新關掉,以免它自動升級回最新版本),原本是最新版本,后來降到42報錯WebDriverException:Missing ‘marionetteProtocol’ field in handshake,也就是火狐版本高或者低都會報錯。
修改腳本browser = webdriver.Firefox()改為browser = webdriver.Firefox(“executable_path="C:\Users\FF\AppData\Local\Programs\Python\Python35\geckodriver.exe"),把geckodriver的絕對路徑直接寫到腳本里,直接告訴它插件在哪,免得它總是找不到。
更換geckodriver版本,下載了11.1.1、11.1.0、11.10.0三個版本,更換嘗試。
最后也不知道哪一步是關鍵,總之最后,python3.5、selenium3.0.1、geckodriver版本11.1.1,火狐瀏覽器不小心被更新到最新50的,腳本跑通了!!!如釋重負~然后把webdriver.Firefox()里的絕對路徑去掉,也沒問題(難道是它第一次找不到路徑,給它指條路認識了,后面就能自己找到了?)
后記總結:
1、第三方插件geckodriver很關鍵,火狐47+版本需要安裝geckodriver.exe
2、geckodriver.exe的路徑配置在系統變量Path下即可,我之所以放到python路徑下,是為了方便,以及前面遇到的問題太多,網上有人建議這么放,確實有效果~
3、火狐瀏覽器如果沒有安裝至默認目錄,webdriver.py和firefox_binary.py的配置需要更改
4、各軟件及插件之間的版本匹配很微妙,至今也沒有明白~
萬事開頭難,學習永無止盡~~~~~~~