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";
   }
}