初学者如何快速搭建基于 Selenium Grid 的分布式自动化

Selenium Grid是一个测试工具,它允许我们在不同的机器上针对不同的浏览器运行测试。

配置Hub

为了简单起见,我们将只使用一台机器来设置Hub,并在同一台机器上设置Node来运行测试。

1.需要安装Java 11或更高版本

2.需要安装浏览器

3.需要安装浏览器驱动程序

下载chromedriver

https://raw.githubusercontent.com/webdriverextensions/webdriverextensions-maven-plugin-repository/master/repository-3.0.json

图片

需要已经安装并配置了PATH环境变量

4.从最新的发布版本下载Selenium Server jar文件

1.https://github.com/SeleniumHQ/selenium/releases/latest
2.https://www.selenium.dev/downloads

图片

5.存放目录(自定义)

在这里插入图片描述

6.创建Hub

java -jar selenium-server-4.16.1.jar hub
  • 1

图片

注意:正如开头所说,请使用java 11或更高版本,java 11下载请自行百度或在公众号内回复java 11下载,否则会报以下错误

D:\software\selenium>java -jar selenium-server-4.16.1.jar hub
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: org/openqa/selenium/grid/Bootstrap has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:467)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:73)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:368)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:362)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:361)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:338)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:495)

图片

7.验证Hub是否启动成功

图片

配置Node

我们在实际应用中,Hub必须和Node不在同一台机器上,我们为了测试方便,将Hub和Node部署在同一台机器上

1.如上所述先启动Hub

2.启动Node

java -jar selenium-server-4.16.1.jar node --hub  http://192.168.1.1:4444

图片

我们再去Hub网页查看Node是否注册成功

图片

Hub和Node配置注意事项

1.hub和node在同一台机器

# hub和node在同一台机器,可以使用此命令启动node
java -jar selenium-server-4.16.1.jar node

# 同一台计算机上有多个节点
# 节点1
java -jar selenium-server-4.16.1.jar node --port 5555

# 节点2
java -jar selenium-server-4.16.1.jar node --port 6666

2.hub和node不在同一台机器

Hub和Nodes通过HTTP和事件总线(事件总线位于Hub内部)相互通信。节点通过事件总线向集线器发送消息以启动注册过程。当Hub收到消息时,通过HTTP与Node联系以确认其存在。

要成功地将Node注册到Hub,必须公开Hub机器上的事件总线端口(默认为4442和4443)。这也适用于节点端口。这样一来,Hub和Node就可以进行通了。

如果Hub使用默认端口,则可以使用–hub标志来注册节点

java -jar selenium-server-4.16.1.jar node --hub http://<hub-ip>:4444

当Hub不使用默认端口时,需要使用–publish-events和–subscribe-events标记。例如,如果Hub使用端口8886、 8887和8888则使用以下命令

java -jar selenium-server-<version>.jar hub --publish-events tcp://<hub-ip>:8886 --subscribe-events tcp://<hub-ip>:8887 --port 8888

Node需要使用这些端口才能成功注册

java -jar selenium-server-<version>.jar node --publish-events tcp://<hub-ip>:8886 --subscribe-events tcp://<hub-ip>:8887

示例代码

1.pom.xml

<dependencies> 
  <!-- https://mvnrepository.com/artifact/junit/junit -->  
  <dependency> 
    <groupId>junit</groupId>  
    <artifactId>junit</artifactId>  
    <version>4.13.2</version>  
    <scope>test</scope> 
  </dependency>  
  <!-- https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-server -->  
  <dependency> 
    <groupId>org.seleniumhq.selenium</groupId>  
    <artifactId>selenium-server</artifactId>  
    <version>4.0.0-alpha-2</version> 
  </dependency> 
</dependencies>

2.示例代码

package org.example;


import org.junit.Test;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import io.github.bonigarcia.wdm.WebDriverManager;

import java.net.MalformedURLException;
import java.net.URL;

/**
 * @author 作者:测试工程师成长之路
 * @version 创建时间:2024/1/21
 * 类说明:Selenium Grid
 */
public class SeleniumGridTest {
    public static final String browserName = "chrome";

    @Test
    public void test() throws InterruptedException {
        try {
            System.setProperty("webdriver.chrome.driver","D:\\software\\selenium\\chromedriver.exe");
            DesiredCapabilities capability = new DesiredCapabilities();
            capability.setBrowserName(browserName);
            capability.setPlatform(Platform.WINDOWS);
            WebDriver driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), capability);
            driver.get("http://www.baidu.com");
            driver.manage().window().maximize();
            Thread.sleep(3000);
            //输入mrjade查询
            driver.findElement(By.id("kw")).sendKeys("mrjade" + Keys.ENTER);
            Thread.sleep(3000);
            // 点击mrjade-博客园,进入mrjade博客首页
            driver.findElement(By.xpath("//*[@id=\"1\"]/h3/a")).click();
            Thread.sleep(5000);

            driver.close();
            driver.quit();

        } catch (
                MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

3.查看Hub网页显示

图片

官方文档

https://www.selenium.dev/zh-cn/documentation/grid/getting_started/

注意

再次需要提醒,此次demo需使用java 11及以上版本,不建议使用WebDriverManager类来自动管理驱动,否则一堆错,比如浏览器版本与驱动版本不匹配,缺少xx类,403之类的,建议使用低版本的selenium server

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 26
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值