1

我无法让 Selenium TestContainers 为我记录测试。

我在 Quarkus 中使用 TestContainers。Quarkus 处理在类中设置测试资源的方式QuarkusTestResourceLifecycleManager,如下所示:

@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 并且测试工作正常。但是,从未触发记录,因为我没有在测试类中设置浏览器容器。

我还尝试将 testcontainer 移动到我的 UI 测试的超类中。这似乎在功能上再次起作用,并且显然触发了录制,但我只得到一个flv大约 149kB 的文件并且没有播放任何东西(大约 10 个单独的 UI 测试)。此外,这似乎不适用于多配置文件测试(交换配置文件、重新启动 Quarkus 和核对静态成员的测试),以及在不同配置文件中断的初始设置之后的测试。

@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) 不可用......

4

1 回答 1

0

最好的情况下,我希望能够在标准的 junit @AfterEach 方法中触发录制,但是所需的参数(TestDescription 描述,可选的 throwable)不可用......

这就是我建议的更高级的框架集成,这些框架集成在 OOTB 中不起作用。您应该能够TestDescription为您的用例实例化 a,例如,从匿名类(它用于推断录音的文件名)。

new TestDescription() {

   @Override
   String getTestId() {
     // can be null, is not used
     return null
   }

   @Override
   String getFilesystemFriendlyName() {
     return "myTestMethod";
   }
}
于 2022-03-04T09:06:56.487 回答