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
- 1
需要已经安装并配置了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.0at 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
- 1
我们再去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
- 1
当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
- 1
Node需要使用这些端口才能成功注册
java -jar selenium-server-<version>.jar node --publish-events tcp://<hub-ip>:8886 --subscribe-events tcp://<hub-ip>:8887
- 1
示例代码
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";@Testpublic 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/
- 1
注意
再次需要提醒,此次demo需使用java 11及以上版本,不建议使用WebDriverManager类来自动管理驱动,否则一堆错,比如浏览器版本与驱动版本不匹配,缺少xx类,403之类的,建议使用低版本的selenium server
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。