selenium Gird2——瀏覽器引數化和與分散式測試
selenium server環境配置
下載Java JDK:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htm
下載Selenium Standalone Server:https://www.seleniumhq.org/download/
配置環境變數
新增系統變數JAVA_HOME:C:\Program Files\Java\jdk1.8.0_191
新增系統變數CLASS_PATH:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
修改PATH:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin
執行selenium standalone Server:在命令提示符中切換到selenium server目錄下,執行 java -jar selenium-server-standalone-xxx.jar
通過Remote()引數化瀏覽器
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver importRemote dr = Remote( command_executor='http://localhost:4444/wd/hub', desired_capabilities={ 'platfrom':'ANY', 'browserName':'firefox', 'version':'', 'javascriptEnabled':True} ) dr.get('http://baidu.com') dr.find_element_by_id('kw').send_keys('hello')
其他瀏覽器引數化如下:
FireFox = {'platform':'ANY', 'browserName':'firefox', 'version':'', 'javascriptEnabled':True, 'marionette':False } Chrome = {'platform':'ANY', 'browserName':'chrome', 'version':'', 'javascriptEnabled':True } Opera= {'platform':'ANY', 'browserName':'opera', 'version':'', 'javascriptEnabled':True } Iphone= {'platform':'MAC', 'browserName':'iPhone', 'version':'', 'javascriptEnabled':True } Android = {'platform':'ANDROID', 'browserName':'android', 'version':'', 'javascriptEnabled':True }
第一次執行發現錯誤:Message: Error forwarding the new session Empty pool of VM for setup Capabilities
出現這個錯誤的可能性是版本不相容,可以通過以下幾個方法解決:
- 升級到最新版本的selenium:pip install -U selenium
- 下載最新版本的Selenium Standalone Server
- 升級瀏覽器
實現使用不同的瀏覽器執行指令碼:
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver import Remote from time import sleep lists = ['firefox','chrome'] #定義一個瀏覽器陣列 for browser in lists: print browser dr = Remote( command_executor='http://localhost:4444/wd/hub', desired_capabilities={ 'platfrom':'ANY', 'browserName':browser, 'version':'', 'javascriptEnabled':True} ) dr.get('http://baidu.com') dr.find_element_by_id('kw').send_keys('hello') sleep(3) dr.quit()
啟動hub節點和node節點:
啟動hub: java -jar selenium-server-standalone-xxx.jar -role hub #不定義的話預設4444
啟動node: java -jar selenium-server-standalone-xxx.jar -role node -port 5555
瀏覽器配置檔案:browser_config.py
#coding=utf-8 def getconfig(): lists = { 'http://localhost:4444/wd/hub':'firefox', 'http://localhost:5555/wd/hub':'chrome' } return lists
gird測試檔案:
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.webdriver import Remote from time import sleep import browser_config for host,browser in browser_config.getconfig().items(): print host print browser dr = Remote( command_executor=host, desired_capabilities={ 'platfrom':'ANY', 'browserName':browser, 'version':'', 'javascriptEnabled':True} ) dr.get('http://baidu.com')
dr.find_element_by_id('kw').send_keys('hello') sleep(3) dr.quit()
HtmlUnit driver :模擬瀏覽器執行,但執行指令碼的過程中並沒有啟動瀏覽器,執行指令碼速度較快。selenium server中包含htmlunit。
啟動遠端node節點
環境準備:
本地hub主機和遠端node主機之間可以ping通
遠端主機必須安裝滿足指令碼執行的軟體(python、selenium、瀏覽器、瀏覽器驅動、Java等)
步驟:
啟動本地hub主機:java -jar selenium-server-standalone-xxxx.jar -role hub
啟動遠端node主機:java -jar selenium-server-standalone-xxxx.jar -role node -port 5555 -hub http://localhost:4444/grid/register
#coding=utf-8 def getconfig(): lists = { 'http://localhost:4444/wd/hub':'firefox', 'http://遠端主機IP:5555/wd/hub':'chrome' } return lists