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

初学者如何快速搭建基于 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

注意:正如开头所说,请使用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://:4444

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

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

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

java -jar selenium-server-.jar node --publish-events tcp://:8886 --subscribe-events tcp://:8887

示例代码

1.pom.xml

junit

junit

4.13.2

test

org.seleniumhq.selenium

selenium-server

4.0.0-alpha-2

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

最后作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些软件测试的学习资源,希望能给你前进的路上带来帮助。

​视频文档获取方式:

这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

✧ 相关推荐 ✧

健康素养
365bet博彩官网

健康素养

📅 10-01 👁️ 7628
其实王自如挺猛,在数码产品百花齐放的时候就把zealer做大,看到后面死局还快速脱坑,他的洞察力真的让我敬佩,直到现在厂...
《汉书·扬雄传》注释及译文
365bet博彩官网

《汉书·扬雄传》注释及译文

📅 09-09 👁️ 6266