学习自动化一直都是在本机操作,感觉这样能够减少工作量确实很少。最近研究了一下分布式操作。
开始的想法是,我在一台机器上启动脚本,然后让脚本在不同机器的不同版本的浏览器上进行跑脚本。
需要准备的东西:
1、jdk,以及环境变量配置好。在cmd下运行javac如果没有报错就行。
2、python开发环境。
3、selenium 安装好
4、下载 selenium-server-standalone-2.45.0.jar的包。这个版本自己看,我用的是这个版本,主要是用46的报错
一切准备好了,我用的三台机器。60机器作为我跑脚本的机器,89、162都是平台。
第一、(我按照网上说的方法貌似有的失败。)最后我是在60这台机器上将在命令行cmd窗口切换到我jar包所在文件夹,然后执行命令:java -jar selenium-server-standalone-2.45.0.jar -role hub (java -jar selenium-server-standalone-2.45.0.jar -port 4000 -role hub -nodeTimeout 600) 他默认起的是4444端口,这个可以自己定义的,这里是启动中心节点,我认为就是在哪台机器作为跑脚本的机器。
第二、启动node:同样cmd切换到jar包目录。java -jar selenium-server-standalone-2.45.0.jar -10.2.4.60 -port 4002 -role webdriver -hub http://10.2.4.60:4000/grid/register -browser browserName=firefox,platform=WINDOWS 这个指定了执行的浏览器以及平台的。可以不要-browser后面的。(在启动中心节点的时候启动了selenium server的)
第三部、在中心节点机器的浏览器中输入http://localhost:4000/grid/console 查看链接的信息,如果有node机器信息那么就正确了
第四部、联调,看在中心节点执行脚本能否在node机器上运行,我一直在这里纠结了很久都不行,直接贴事例代码:
__author__ = 'pc' from selenium.webdriver import Remote from selenium.webdriver.common.desired_capabilities import DesiredCapabilities list =['http://10.2.4.89:4002/wd/hub','http://10.2.4.162:4001/wd/hub'] for host in list: driver = Remote(command_executor=host, desired_capabilities=DesiredCapabilities.FIREFOX) driver.get('http://www.baidu.com') driver.find_element_by_id('kw').send_keys('selenium python') driver.find_element_by_id('su').click() driver.quit()
我纠结了很久才调通的,还有很多需要扩展的地方,但是觉得只要调试通了一切都好说了。