Selenium Grid方案介绍之脚本编写
5.之前提到脚本的编写,可以参考git文档中的demo
脚本代码如下:
from selenium.webdriver import DesiredCapabilities
from selenium.webdriver import Remote
class TestGrid():
def test_grid(self):
hub_url = "http://localhost:4444/wd/hub"
capabilities = DesiredCapabilities.CHROME.copy()
for i in range(1, 5):
driver = Remote(command_executor=hub_url, desired_capabilities=capabilities)
driver.get("https://www.baidu.com/")
分析代码:
查看DesiredCapabilities.CHROME.copy()中的DesiredCapabilities源码可以看到 也可以设置平台、version版本等等其他参数
1.capabilities = DesiredCapabilities.CHROME.copy()中为什么要用copy呢, 因为copy是对字典的一个深copy拷贝,这样修改不会改变原来字典中的值,如果不使用会改变原来的东西
2.查看Remote方法中源码 第一个参数是指定执行的地址,默认是本地的,这时候就可以不用写了,但是如果不是本地的,就得写上了;
第二个参数要指定一下我们要匹配的hub节点的参数,他会根据这个参数匹配node节点,匹配上了就会发送到node上
6.执行
1)执行脚本会发现,它会等待第一个浏览器打开后执行完关闭,再打开第二个浏览器,这是为什么呢,因为写在了一个进程里面如果不想这样执行,使用多线程,进行并发执行就可以了
2)可以看到hub接受了4个请求,并且可以看到请求参数,它把这个节点呢进行了hub的分发,分发到哪里了呢,分发到了node上,我们可以点开已经开启的node,可以看到一个node上得到了两个,并且都得到了执行,如果node跟hub处于不同的平台,一定要注册到hub,这一点非常重要!!!在node的节点一定要配置环境变量;一定要配置webdriver以及python的环境变量,才能进行运行
如下图,hub的日志
其中一个节点的请求参数如下:
7.最好把要配置的节点与selenium grid放在同一个文件夹下来管理,放在一个不会被误删的文件路径下
浙公网安备 33010602011771号