一、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!"