模拟场景并在不同位置的计算机之间运行类似的任务可能非常麻烦。我们可能需要从不同的站点测试应用程序,或者自动化一个必须从全球不同位置的不同浏览器、操作系统和机器运行的过程。问题是,同时进行。您将如何处理这种情况?您是否正在为此设想一种中心辐射式安排?完全。这将需要能够促进中心辐射模型的人员。如果那是硒,你会感到惊讶吗?我们都只知道Selenium是一种自动化软件验证和确认的工具。
Selenium Suite包含这个称为“Selenium Grid”的强大功能。Selenium Suite 适用于集线器和节点模型。在这里,我们只需要在称为 Hub 的单台机器上运行特定的测试或任务。但是执行是由称为集线器的不同机器完成的。
![](https://img-blog.csdnimg.cn/img_convert/84f6203eb31d420691a220e14c81afd2.png)
随着强大的硒网格的可用性,您现在必须决定是否需要使用此功能。让我帮你决定。
自己问这些问题。
我是否需要同时运行来自不同浏览器或不同操作系统的测试或任务?
我是否有可以并行执行的多个测试或任务,从而节省时间?
如果您的答案是肯定的,您可以继续使用Selenium Grid满足您的要求。既然我们现在已经决定了,让我们看看如何使用硒网格。在eGrove,我们在Python 应用程序之一中使用了Selenium Grid。因此,我还将尝试阐明如何在Python中使用Selenium Grid。
首先,我们将尝试了解Grid网格架构。
![](https://img-blog.csdnimg.cn/img_convert/1d42fd31592e4c3cb641908d084f9f32.png)
随着不同的节点连接到集线器,都在不同的机器上,他们现在可以运行一个任务或测试每个节点,从而节省了大量时间,并且不需要频繁的人为干预。
我们将使用网格版本2来演示本文中的步骤和实现,因为它是Selenium Grid的高级和最新版本。网格版本 2 现在也支持通过 WebDrivers 实现自动化。网格 1 仅支持 Selenium RC 命令和脚本。Grid 2 现在还添加了将最多 5 个浏览器分配给遥控器的功能。
在实时场景中使用硒网格:
John是拥有多个供应商门户网站的注册买家。John必须定期查看特定类别产品的新到货部分并订购它们。他还需要同时向他的仓库提供商更新这些产品预计到达日期的详细信息。下订单后,他必须在他的电子商务网站上添加这些产品。从那以后,他的USP一直提供当日送达的最新产品;他必须有这种机制来支持他的高级客户。但是,他希望将这些重复性流程自动化,以节省时间,并专注于其他途径来促进销售。
这是eGrove介入并提供其在自动化方面的专业知识的时候。我们设置了一个 Hub,用于托管这些任务,并根据某些规则定义在多个节点上创建它们的实例。整个操作是使用Selenium Grid和Python自动化的,否则需要频繁的人类发明。
这只是我们如何使用Selenium Grid来自动化任务的一个例子。现在让我们动手,努力设置Selenium Grid并编写它们背后的Python代码。
1.下载硒独立服务器,在~/selenium创建一个本地文件夹,然后将jar复制或移动到该路径:
$ mkdir ~/selenium
$ cd ~/selenium
$ wget https://bit.ly/2zm3ZzF
$ mv selenium-java-3.141.59.zip ~/selenium/
2.在此处下载并安装 Python 的 Selenium WebDriver 绑定:
pip install selenium==3.14
3.从(用于与浏览器相关的交互)下载chrome驱动程序并将其复制到~/selenium,并为单元测试创建python文件:
$ wget https://chromedriver.storage.googleapis.com/75.0.3770.8/chromedriver_linux64.zip
$ unzip chromedriver_linux64.zip
$ touch selenium_unittests.py
创建您的单元测试文件并运行它。
下面是一个小示例,用于验证特定网站的标题并在网站上自动执行简单搜索。
在您喜欢的文本编辑器中打开selenium_unittests.py,例如:
$ gedit selenium_unittests.py & or
$ vim selenium_unittests.py
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://github.com")
print(driver.title)
assert "GitHub" in driver.title
elem = driver.find_element_by_name("q")
elem.send_keys("testname")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.close()
保存文件。打开另一个终端并执行以下指令:
$ cd ~/selenium
$ java -jar selenium-java-3.141.59.jar
打开另一个终端并运行您的 python 脚本:
$ cd ~/selenium
$ python selenium_unittests.py
网 格
为不同的浏览器设置一个包含许多节点的网格,并以分布式和并发方式运行示例的许多实例。
设置环境:
在集线器模式下运行独立服务器(首先打开新终端):
$ cd ~/selenium
$ java -jar selenium-server-standalone-2.49.1.jar -role hub
之后,我们将看到我们的节点应该在哪里注册自己: INFO – 节点应该注册到 https://{{ip 或主机}}:4444/grid/register/ 我们现在可以注册两个节点(在两个不同的终端中执行此操作):
java -jar selenium-server-standalone-2.49.0.jar -role node -hub https://{{ip or host}}:4444/grid/register/ -port 3456
java -jar selenium-server-standalone-2.49.0.jar -role node -hub https://{{ip or host}}:4444/grid/register/ -port 4567
好的,现在我们有两个节点注册到我们的网格。
远程硒服务器
但是,Selenium服务器不必在同一台机器上,因此我们需要一种方法来远程运行我们的测试。我们唯一需要更改的是驱动程序的实例化。我们将其更改为如下所示:
driver = webdriver.Remote(
command_executor='https://{{ip or host}}:4444/wd/hub',
desired_capabilities={'browserName': chrome, 'javascriptEnabled': True})
这是一个使用 bash 脚本多次执行的示例
创建 bash 脚本 grid.sh 并对其进行编辑以包含:
#!/bin/bash
python selenium_unittests.py &
python selenium_unittests.py &
python selenium_unittests.py &
python selenium_unittests.py &
python selenium_unittests.py &
您可以打开 selenium 集线器日志,并查看测试是否通过不同的节点分布:
信息 – 尝试在节点上创建新会话 https://{{ip 或主机}}:4567
信息 – 尝试在节点上创建新会话 https://{{ip 或主机}}:3456