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

selenium Gird2——瀏覽器參數化和與分布式測試

pool serve file 主機 oracle item getconf 第一次 port

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

selenium Gird2——瀏覽器參數化和與分布式測試