我有一个基于宁静-bdd/宁静-黄瓜-发酵剂项目的项目。我使用试验容器启动两个Docker容器,以及一个Selenium Grid容器来运行测试。
new GenericContainer<>(SELENIUM_IMAGE)
...
.withExposedPorts(SELENIUM_CONTAINER_PORT, SELENIUM_CONTAINER_NOVNC_PORT)
...
);当测试开始时,test-containers将提升容器,并将随机主机端口绑定到容器的所有公开端口。
因此,我无法在serenity.conf中为远程驱动程序的url定义一个固定值。
webdriver.remote.url = "http://localhost:????/wd/hub"因此,我需要一种以编程方式设置webdriver.remote.url的方法。
一个选项是使用FixedHostPortGenericContainer,它允许您定义容器公开端口将绑定到的主机端口。
不过,我宁愿使用另一种方法,因为开发人员说
尽管如此,我们强烈建议不要使用固定端口,因为这将自动导致集成测试(这是一种反模式)。
所以问题是:我如何在运行时修改webdriver.remote.url的值?serenity-bdd是否提供了在运行时重新加载net.thucydides.core.util.SystemEnvironmentVariables的任何选项?
发布于 2019-09-16 14:34:52
最近也遇到了同样的问题,但幸运的是找到了解决办法:
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中进行定义。
webdriver.driver = provided
webdriver.provided.type = mydriver
webdriver.provided.mydriver = <your_factory_package>.CustomWebDriverFactory
thucydides.driver.capabilities = mydriverhttps://stackoverflow.com/questions/57654335
复制相似问题