Selenium 网格 4:如何 运行 使用不同的浏览器和 OS 进行测试
Selenium grid 4: How to run a test with differents browsers and OS
selenium grid 的初学者,我刚刚创建了一个允许在 Whosebug 主页上导航的小测试
为此,我将 selenium 服务器放在我的磁盘上,我打开了 2 个终端,如此处的文档所示。
https://www.selenium.dev/documentation/grid/getting_started/#hub-and-nodes
测试开始很好,现在我想在修改OS(例如:windows)的同时在firefox下运行同样测试。我该怎么做呢?我必须在我的项目中创建另一个测试文件吗?然后如何运行 多配置测试?我找不到这些问题的答案。
我的配置:
-Linux Ubuntu 20.04
-Google 和 chrome 95
-selenium 服务器的最新版本:4.1.1
测试代码如下:
public class StepGoWhosebug {
RemoteWebDriver driver;
String nodeUrl;
@Given("I'm on google search page")
public void i_m_on_google_search_page() {
try {
nodeUrl = "http://localhost:4444";
ChromeOptions options = new ChromeOptions();
// options.addArguments("--headless");
options.addArguments("start-maximized");
driver = new RemoteWebDriver(new URL(nodeUrl), options);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
driver.get("https://www.google.com");
} catch (MalformedURLException error) {
error.printStackTrace();
}
}
@When("I enter the name of the site")
public void i_enter_the_name_of_the_site() {
WebElement webElementList = driver.findElement(By.id("L2AGLb"));
webElementList.click();
driver.findElement(By.name("q")).sendKeys("Whosebug", Keys.ENTER);
}
@Then("I'm navigated on the home page of Whosebug")
public void i_m_navigated_on_the_home_page_of_Whosebug() {
driver.findElement(By.xpath("//a[@href='https://whosebug.com/']")).click();
driver.close();
}
}
编辑:
我忘了给 Gerkhin 的片段:
Feature: search the home page of Whosebug
Scenario: Go to the site Whosebug
Given I'm on google search page
When I enter the name of the site
Then I'm navigated on the home page of Whosebug
谢谢
我可以看到您正在使用 Cucumber,所以我编辑了您的问题以添加相应的标签(因为这很重要,因为我们正在进行参数化)。
网格部分
Selenium Grid 的想法是在集群中安装 Grid 组件,其中的节点代表不同的 OS,并且每个 runtime/OS 都安装了一个或多个驱动程序和浏览器。
因此您配置节点,以便它们知道驱动程序安装在哪里以及如何 运行 浏览器(以及每个节点可以执行什么浏览器:例如 Chrome,Firefox)并且每个节点在名为 hub 的网格组件。
一方面,集线器知道哪些节点 运行 正在哪个 OS 以及它们可以使用哪些浏览器运行。另一方面,集线器充当远程网络驱动程序(它将网络驱动程序协议公开给外部客户端,也就是自动化测试)。
您可以找到网格的概览 here and find configuration flags and aspects here。
代码部分
在代码方面,您对测试进行参数化,以便每个测试都从头开始执行,但设置了不同的功能。在您的示例中,您仅使用 ChromeOptions
这将使集线器将您的调用分派到可以 运行 Chrome 浏览器的节点。
您的挑战是让您的代码为每个 运行 配置不同的功能,以便 Grid 会在集群中为您的测试查找合适的节点(例如 "啊哈..在 Linux 上的 运行 Firefox,这意味着我会将您的呼叫分派给节点 C
")
黄瓜
由于您在示例中使用了 Cucumber,我假设您倾向于将其合并到最终解决方案中。如果是这样,你需要从学习黄瓜中的参数化实践开始:See here, here and here; setting up context in Cucumber, and sharing the state in Cucumber with Dependency Injection with Guice or PicoContainer.
结合所有内容,添加少量 parallelization,您将从您的框架中获得最大价值。
selenium grid 的初学者,我刚刚创建了一个允许在 Whosebug 主页上导航的小测试 为此,我将 selenium 服务器放在我的磁盘上,我打开了 2 个终端,如此处的文档所示。
https://www.selenium.dev/documentation/grid/getting_started/#hub-and-nodes
测试开始很好,现在我想在修改OS(例如:windows)的同时在firefox下运行同样测试。我该怎么做呢?我必须在我的项目中创建另一个测试文件吗?然后如何运行 多配置测试?我找不到这些问题的答案。
我的配置:
-Linux Ubuntu 20.04
-Google 和 chrome 95
-selenium 服务器的最新版本:4.1.1
测试代码如下:
public class StepGoWhosebug {
RemoteWebDriver driver;
String nodeUrl;
@Given("I'm on google search page")
public void i_m_on_google_search_page() {
try {
nodeUrl = "http://localhost:4444";
ChromeOptions options = new ChromeOptions();
// options.addArguments("--headless");
options.addArguments("start-maximized");
driver = new RemoteWebDriver(new URL(nodeUrl), options);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
driver.get("https://www.google.com");
} catch (MalformedURLException error) {
error.printStackTrace();
}
}
@When("I enter the name of the site")
public void i_enter_the_name_of_the_site() {
WebElement webElementList = driver.findElement(By.id("L2AGLb"));
webElementList.click();
driver.findElement(By.name("q")).sendKeys("Whosebug", Keys.ENTER);
}
@Then("I'm navigated on the home page of Whosebug")
public void i_m_navigated_on_the_home_page_of_Whosebug() {
driver.findElement(By.xpath("//a[@href='https://whosebug.com/']")).click();
driver.close();
}
}
编辑: 我忘了给 Gerkhin 的片段:
Feature: search the home page of Whosebug
Scenario: Go to the site Whosebug
Given I'm on google search page
When I enter the name of the site
Then I'm navigated on the home page of Whosebug
谢谢
我可以看到您正在使用 Cucumber,所以我编辑了您的问题以添加相应的标签(因为这很重要,因为我们正在进行参数化)。
网格部分
Selenium Grid 的想法是在集群中安装 Grid 组件,其中的节点代表不同的 OS,并且每个 runtime/OS 都安装了一个或多个驱动程序和浏览器。
因此您配置节点,以便它们知道驱动程序安装在哪里以及如何 运行 浏览器(以及每个节点可以执行什么浏览器:例如 Chrome,Firefox)并且每个节点在名为 hub 的网格组件。
一方面,集线器知道哪些节点 运行 正在哪个 OS 以及它们可以使用哪些浏览器运行。另一方面,集线器充当远程网络驱动程序(它将网络驱动程序协议公开给外部客户端,也就是自动化测试)。
您可以找到网格的概览 here and find configuration flags and aspects here。
代码部分
在代码方面,您对测试进行参数化,以便每个测试都从头开始执行,但设置了不同的功能。在您的示例中,您仅使用 ChromeOptions
这将使集线器将您的调用分派到可以 运行 Chrome 浏览器的节点。
您的挑战是让您的代码为每个 运行 配置不同的功能,以便 Grid 会在集群中为您的测试查找合适的节点(例如 "啊哈..在 Linux 上的 运行 Firefox,这意味着我会将您的呼叫分派给节点 C
")
黄瓜
由于您在示例中使用了 Cucumber,我假设您倾向于将其合并到最终解决方案中。如果是这样,你需要从学习黄瓜中的参数化实践开始:See here, here and here; setting up context in Cucumber, and sharing the state in Cucumber with Dependency Injection with Guice or PicoContainer.
结合所有内容,添加少量 parallelization,您将从您的框架中获得最大价值。