Quarkus 和 Selenium TestContainer-如何触发记录
Quarkus and Selenium TestContainer- how to trigger recording
我无法让 Selenium TestContainers 为我记录测试。
我在 Quarkus 中使用 TestContainers。 Quarkus 处理 QuarkusTestResourceLifecycleManager
class 中设置测试资源的方法,例如:
@Slf4j
@Testcontainers //not working
public class TestResourceLifecycleManager implements QuarkusTestResourceLifecycleManager {
//...
@Container //not working
private static BrowserWebDriverContainer<?> BROWSER_CONTAINER = null;
//...
@Override
public Map<String, String> start() {
File recordingDir = new File("build/seleniumRecordings/");
recordingDir.mkdir();
BROWSER_CONTAINER = new BrowserWebDriverContainer<>()
.withCapabilities(new FirefoxOptions())
.withRecordingMode(RECORD_ALL, recordingDir);
BROWSER_CONTAINER.start();
}
}
这在功能上有效,因为我能够通过测试容器使用 Selenium,并且测试工作正常。然而,记录从未被触发,因为我没有在测试中设置我的浏览器容器 class。
我还尝试将测试容器移动到超级class 用于我的 UI 测试。这似乎再次在功能上起作用,并且显然触发了录音,但我只得到一个约 149kB 的 flv
文件并且没有播放任何东西(大约 10 个单独的 UI 测试)。此外,这似乎不能很好地处理多配置文件测试(交换配置文件、重新启动 Quarkus 和 nuking 静态成员的测试),以及在不同配置文件中断的初始集之后的测试。
@Slf4j
@Testcontainers
public class WebUiTest extends RunningServerTest implements TestLifecycleAware {
private static final File recordingDir = new File("build/seleniumRecordings/");
@SuppressWarnings({"unused", "FieldCanBeLocal", "FieldMayBeFinal"})
@Container
private static BrowserWebDriverContainer<?> BROWSER_CONTAINER = new BrowserWebDriverContainer<>()
.withCapabilities(new FirefoxOptions())
.withRecordingMode(RECORD_ALL, recordingDir);
static {
//required for tests to work
BROWSER_CONTAINER.start();
}
}
有什么想法吗?最好的情况我希望能够在标准的 junit @AfterEach
方法中触发记录,但是所需的参数 (TestDescription description, Optional<Throwable> throwable
) 不可用...
Best-case I would love to be able to trigger recording in a standard junit @AfterEach method, but the arguments required (TestDescription description, Optional throwable) aren't available...
对于不适用于 OOTB 的更高级的框架集成,这是我推荐的。您应该能够为您的用例实例化一个 TestDescription
,例如,从一个匿名的 class(它用于推断录音的文件名)。
new TestDescription() {
@Override
String getTestId() {
// can be null, is not used
return null
}
@Override
String getFilesystemFriendlyName() {
return "myTestMethod";
}
}
我无法让 Selenium TestContainers 为我记录测试。
我在 Quarkus 中使用 TestContainers。 Quarkus 处理 QuarkusTestResourceLifecycleManager
class 中设置测试资源的方法,例如:
@Slf4j
@Testcontainers //not working
public class TestResourceLifecycleManager implements QuarkusTestResourceLifecycleManager {
//...
@Container //not working
private static BrowserWebDriverContainer<?> BROWSER_CONTAINER = null;
//...
@Override
public Map<String, String> start() {
File recordingDir = new File("build/seleniumRecordings/");
recordingDir.mkdir();
BROWSER_CONTAINER = new BrowserWebDriverContainer<>()
.withCapabilities(new FirefoxOptions())
.withRecordingMode(RECORD_ALL, recordingDir);
BROWSER_CONTAINER.start();
}
}
这在功能上有效,因为我能够通过测试容器使用 Selenium,并且测试工作正常。然而,记录从未被触发,因为我没有在测试中设置我的浏览器容器 class。
我还尝试将测试容器移动到超级class 用于我的 UI 测试。这似乎再次在功能上起作用,并且显然触发了录音,但我只得到一个约 149kB 的 flv
文件并且没有播放任何东西(大约 10 个单独的 UI 测试)。此外,这似乎不能很好地处理多配置文件测试(交换配置文件、重新启动 Quarkus 和 nuking 静态成员的测试),以及在不同配置文件中断的初始集之后的测试。
@Slf4j
@Testcontainers
public class WebUiTest extends RunningServerTest implements TestLifecycleAware {
private static final File recordingDir = new File("build/seleniumRecordings/");
@SuppressWarnings({"unused", "FieldCanBeLocal", "FieldMayBeFinal"})
@Container
private static BrowserWebDriverContainer<?> BROWSER_CONTAINER = new BrowserWebDriverContainer<>()
.withCapabilities(new FirefoxOptions())
.withRecordingMode(RECORD_ALL, recordingDir);
static {
//required for tests to work
BROWSER_CONTAINER.start();
}
}
有什么想法吗?最好的情况我希望能够在标准的 junit @AfterEach
方法中触发记录,但是所需的参数 (TestDescription description, Optional<Throwable> throwable
) 不可用...
Best-case I would love to be able to trigger recording in a standard junit @AfterEach method, but the arguments required (TestDescription description, Optional throwable) aren't available...
对于不适用于 OOTB 的更高级的框架集成,这是我推荐的。您应该能够为您的用例实例化一个 TestDescription
,例如,从一个匿名的 class(它用于推断录音的文件名)。
new TestDescription() {
@Override
String getTestId() {
// can be null, is not used
return null
}
@Override
String getFilesystemFriendlyName() {
return "myTestMethod";
}
}