一、grid介绍

1、本文用的是selenium-server-standalone-3.8.1.jar

2、Firefox用的55版本和对应的驱动

二、grid使用流程说明
比如有个A机器,作用是hub  中控:
启动hub命令:
java -jar selenium-server-standalone-3.8.1.jar -role hub

还有一个B机器,作为节点机1,将节点机连接到hub,节点机连接hub命令:

java -jar selenium-server-standalone-3.8.1.jar -role webdriver -hub http://127.0.0.1:4444/grid/register-Dwebdriver.chrome.driver="c:\chromedriver.exe"-Dwebdriver.ie.driver="c:\IEDriverServer.exe"-Dwebdriver.firefox.driver="c:\geckodriver.exe" -port 6666 -maxSession 5 -browser browserName="internet explorer",maxInstances=5 -browser browserName="chrome",maxInstances=5 -browser browserName="firefox",maxInstance=5

 

查看当前有谁连接了的命令
http://127.0.0.1:4444/grid/console

 

最后有一个D机器,作用是执行py脚本,将hub和节点机启动后,执行如下代码:

 

练习:随机选择一个浏览器,然后启动
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time,random

# 节点主机的访问地址
host="http://127.0.0.1:6666/wd/hub"
browsers = ["firefox", "chrome", "internet explorer"]
driver = webdriver.Remote(
  # 设定Node节点的URL地址,后续将通过访问这个地址连接到Node计算机
  command_executor = host,
  desired_capabilities = {
        # 在browsers列表中随机选择一个浏览器
        "browserName": random.choice(browsers),
        "platform": "WINDOWS"
  })

try:
    #driver.implicitly_wait(30)
    driver.maximize_window()
    driver.get("http://www.sogou.com")
    assert u"搜狗" in driver.title
    elem = driver.find_element_by_id("query")
    elem.send_keys(u"刻意练习")
    elem.send_keys(Keys.RETURN)
    time.sleep(3)
    assert u"练习" in driver.page_source
    print 'done!'
finally:
    driver.quit()
练习2:在上一个练习的基础上做优化,实现同时启动多个浏览器
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time,random

# 节点主机的访问地址
host="http://127.0.0.1:6666/wd/hub"
browsers = ["firefox", "chrome", "internet explorer"]
broser_drivers = []
assert_word = [u'搜狗',u"百度",u'bing']
urls =['http://www.sogou.com','http://www.baidu.com','http://cn.bing.com']
for i in range(len(browsers)):
    driver = webdriver.Remote(
    # 设定Node节点的URL地址,后续将通过访问这个地址连接到Node计算机
    command_executor = host,
    desired_capabilities = {
        # 在browsers列表中随机选择一个浏览器
        "browserName": browsers[i],
        "platform": "WINDOWS"
    })
    broser_drivers.append(driver)


try:
    for i in range(len(broser_drivers)): 
        #driver.implicitly_wait(30)
        broser_drivers[i].maximize_window()
        broser_drivers[i].get(urls[i])
        assert assert_word[i] in broser_drivers[i].title
        print 'done!'
finally:
    for i in range(len(broser_drivers)):
        broser_drivers[i].quit()
        print "done!"