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,您将从您的框架中获得最大价值。