Selenium Grid Enable Jaeger Steps(Windows)
1.下载ElasticSearch 和 Jaeger
1)我用的7.x的版本(Elasticsearch 7.16.3 | Elastic), 启动起来
2)下载Jaeger(Windows Service Deployment — Jaeger documentation)
3)启动如下3个cmd命令
①
jaeger-agent.exe --reporter.grpc.host-port=localhost:14250
②
set SPAN_STORAGE_TYPE=elasticsearch
jaeger-collector.exe --es.server-urls=http://localhost:9200
③
set SPAN_STORAGE_TYPE=elasticsearch
jaeger-query.exe --es.server-urls=http://localhost:9200
4)打开Jaeger UI的[Port: 16686; URL: http://localhost:16686/search]
2.下载Selenium-Server-4.9.0, 启动Hub 和 Grid
1)下载地址(Release Selenium 4.9.0 · SeleniumHQ/selenium · GitHub)
2)启动Hub
java -Dotel.traces.exporter=jaeger -Dotel.exporter.jaeger.endpoint=http://localhost:14250 -Dotel.resource.attributes=service.name=selenium-grid-hub -jar selenium-server-4.9.0.jar --ext tracing-lib hub --healthcheck-interval 600
Notes: --ext tracing-lib 这里tracing-lib是个文件夹 是下面2个dependency的所有lib文件
依赖2个dependency: io.opentelemetry:opentelemetry-exporter-jaeger:1.22.0 io.grpc:grpc-netty:1.45.0
3)启动Node
java -Dotel.traces.exporter=jaeger -Dotel.exporter.jaeger.endpoint=http://localhost:14250 -Dotel.resource.attributes=service.name=selenium-grid-node-1 -jar selenium-server-4.9.0.jar --ext tracing-lib node --config .\config.toml
config.toml 文件如下
[node]
detect-drivers = false
port = 5555
grid-url = "http://192.168.1.4:4444"[[node.driver-configuration]]
display-name = "Chrome"
stereotype = "{\"browserName\": \"chrome\", \"browserVersion\": \"112\", \"platformName\": \"Windows\", \"goog:chromeOptions\": {\"binary\": \"C:\\\\Program Files\\\\Google\\\\Chrome\\\\Application\\\\chrome.exe\"}}"
webdriver-executable = "C:\\tools\\chromedriver.exe"[events]
publish = "tcp://192.168.1.4:4442"
subscribe = "tcp://192.168.1.4:4443"
4) Selenium Grid启动如下
3.执行Selenium Test
简单的Demo: 打开Baidu搜索
package org.selenium.test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.support.CacheLookup;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import java.net.URL;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
public class BaiduSearchPage {
WebDriver driver;
@FindBy(id = "kw")
WebElement searchInput;
@FindBy(id = "su")
@CacheLookup
WebElement searchButton;
public BaiduSearchPage(WebDriver driver) {
this.driver = driver;
PageFactory.initElements(driver, this);
}
public void inputText(String search) {
searchInput.sendKeys(search);
}
public void clickButton() {
searchButton.click();
}
public static void main(String[] args) throws Exception {
WebDriver driver = null;
try {
BaiduSearchPage searchPage;
driver = new RemoteWebDriver(new URL("http://192.168.1.4:4444"), new ChromeOptions());
driver.manage().window().maximize();
driver.get("http://www.baidu.com");
searchPage = new BaiduSearchPage(driver);
searchPage.inputText("selenium");
searchPage.clickButton();
TimeUnit.SECONDS.sleep(5);
} finally {
if (Objects.nonNull(driver)) {
driver.quit();
}
}
}
}
4.查看Jaeger上Selenium的Trace