1. 程式人生 > >selenium Gird2——瀏覽器引數化和與分散式測試

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 import
Remote 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