Selenium 在运行时修改远程驱动程序URL
我有一个基于该项目的项目。我正在使用启动两个Docker容器以及一个Selenium网格容器来运行测试Selenium 在运行时修改远程驱动程序URL,selenium,serenity-bdd,testcontainers,Selenium,Serenity Bdd,Testcontainers,我有一个基于该项目的项目。我正在使用启动两个Docker容器以及一个Selenium网格容器来运行测试 new GenericContainer<>(SELENIUM_IMAGE) ... .withExposedPorts(SELENIUM_CONTAINER_PORT, SELENIUM_CONTAINER_NOVNC_PORT) ... ); 因此,我需要一种以编程方式设置webdriver.remote
new GenericContainer<>(SELENIUM_IMAGE)
...
.withExposedPorts(SELENIUM_CONTAINER_PORT, SELENIUM_CONTAINER_NOVNC_PORT)
...
);
因此,我需要一种以编程方式设置webdriver.remote.url的方法
一个选项是使用FixedHostPortGenericContainer,它允许您定义容器公开端口将绑定到的主机端口
不过,正如开发人员所说,我更愿意使用一种不同的方法
虽然这样做有效,但我们强烈建议不要使用固定端口,因为这将自动导致集成测试,这是一种反模式测试
所以问题是:如何在运行时修改webdriver.remote.url的值?serenity bdd是否提供了在运行时重新加载net.thucydides.core.util.SystemEnvironmentVariables的选项?最近面临同样的问题,但幸运地找到了解决方案:
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import net.serenitybdd.core.webdriver.driverproviders.FirefoxDriverCapabilities;
import net.thucydides.core.guice.Injectors;
import net.thucydides.core.util.EnvironmentVariables;
import net.thucydides.core.webdriver.DriverSource;
public class CustomWebDriverFactory implements DriverSource {
@Override
public WebDriver newDriver() {
try {
String ip = "your_dynamic_ip";
return new RemoteWebDriver(
new URL("http://" + ip + ":4444/wd/hub"),
new FirefoxDriverCapabilities(Injectors.getInjector().getProvider(EnvironmentVariables.class).get()).getCapabilities());
}
catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
@Override
public boolean takesScreenshots() {
return true;
}
}
因此,您必须添加此类工厂实现,并在serenity.properties中定义:
import java.net.MalformedURLException;
import java.net.URL;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.RemoteWebDriver;
import net.serenitybdd.core.webdriver.driverproviders.FirefoxDriverCapabilities;
import net.thucydides.core.guice.Injectors;
import net.thucydides.core.util.EnvironmentVariables;
import net.thucydides.core.webdriver.DriverSource;
public class CustomWebDriverFactory implements DriverSource {
@Override
public WebDriver newDriver() {
try {
String ip = "your_dynamic_ip";
return new RemoteWebDriver(
new URL("http://" + ip + ":4444/wd/hub"),
new FirefoxDriverCapabilities(Injectors.getInjector().getProvider(EnvironmentVariables.class).get()).getCapabilities());
}
catch (MalformedURLException e) {
throw new RuntimeException(e);
}
}
@Override
public boolean takesScreenshots() {
return true;
}
}
webdriver.driver = provided
webdriver.provided.type = mydriver
webdriver.provided.mydriver = <your_factory_package>.CustomWebDriverFactory
thucydides.driver.capabilities = mydriver