com.google.common.io.PatternFilenameFilter#org.testcontainers.containers.BrowserWebDriverContainer源码实例Demo

下面列出了com.google.common.io.PatternFilenameFilter#org.testcontainers.containers.BrowserWebDriverContainer 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

@Override
public void afterEach(ExtensionContext extensionContext) throws Exception {
  if (extensionContext.getExecutionException().isPresent()) {
    Object testInstance = extensionContext.getRequiredTestInstance();
    Field containerField = testInstance.getClass().getDeclaredField("container");
    containerField.setAccessible(true);
    BrowserWebDriverContainer browserContainer = (BrowserWebDriverContainer) containerField.get(testInstance);
    byte[] screenshot = browserContainer.getWebDriver().getScreenshotAs(OutputType.BYTES);

    try {
      Path path = Paths
        .get("target/selenium-screenshots")
        .resolve(String.format("%s-%s-%s.png",
          LocalDateTime.now(),
          extensionContext.getRequiredTestClass().getName(),
          extensionContext.getRequiredTestMethod().getName()));

      Files.createDirectories(path.getParent());
      Files.write(path, screenshot);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
 
@Test
public void createContainerWithoutShmVolume() {
    try (
        BrowserWebDriverContainer webDriverContainer = new BrowserWebDriverContainer<>()
            .withSharedMemorySize(512 * FileUtils.ONE_MB)
            .withCapabilities(new FirefoxOptions())
    ) {
        webDriverContainer.start();

        assertEquals("Shared memory size is configured",
            512 * FileUtils.ONE_MB,
            webDriverContainer.getShmSize());

        assertEquals("No shm mounts present", emptyList(), shmVolumes(webDriverContainer));
    }
}
 
protected void doSimpleWebdriverTest(BrowserWebDriverContainer rule) {
    RemoteWebDriver driver = setupDriverFromRule(rule);
    System.out.println("Selenium remote URL is: " + rule.getSeleniumAddress());
    System.out.println("VNC URL is: " + rule.getVncAddress());

    driver.get("http://www.google.com");
    WebElement search = driver.findElement(By.name("q"));
    search.sendKeys("testcontainers");
    search.submit();

    List<WebElement> results = new WebDriverWait(driver, 15)
        .until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("#search h3")));

    assertTrue("the word 'testcontainers' appears in search results",
        results.stream()
            .anyMatch(el -> el.getText().contains("testcontainers")));
}
 
@Test
public void recordingTestThatShouldBeRecordedButNotPersisted() {
    try (
        // withRecordingFileFactory {
        BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
            // }
            .withCapabilities(new ChromeOptions())
            // withRecordingFileFactory {
            .withRecordingFileFactory(new CustomRecordingFileFactory())
        // }
    ) {
        chrome.start();

        doSimpleExplore(chrome);
    }
}
 
private void deployChrome() {
    LOGGER.info("Deploying chrome browser");
    if (!TestUtils.isExternalRegistry()) {
        Testcontainers.exposeHostPorts(TestUtils.getRegistryPort());
    }
    chrome = new BrowserWebDriverContainer()
            .withCapabilities(new ChromeOptions());
    chrome.start();
    SeleniumProvider.getInstance().setupDriver(chrome.getWebDriver());
    SeleniumProvider.getInstance().setUiUrl(TestUtils.getRegistryUIUrl().replace("localhost", "host.testcontainers.internal"));
    deployed = true;
}
 
源代码6 项目: Bytecoder   文件: BytecoderUnitTestRunner.java
private static synchronized BrowserWebDriverContainer initializeSeleniumContainer() {

        if (SELENIUMCONTAINER == null) {
            java.util.logging.Logger.getLogger("org.openqa.selenium").setLevel(Level.OFF);

            final ChromeOptions theOptions = new ChromeOptions().setHeadless(true);
            theOptions.addArguments("--js-flags=experimental-wasm-eh");
            theOptions.addArguments("--enable-experimental-wasm-eh");
            theOptions.addArguments("disable-infobars"); // disabling infobars
            theOptions.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
            theOptions.addArguments("--no-sandbox"); // Bypass OS security model
            theOptions.setExperimentalOption("useAutomationExtension", false);
            final LoggingPreferences theLoggingPreferences = new LoggingPreferences();
            theLoggingPreferences.enable(LogType.BROWSER, Level.ALL);
            theOptions.setCapability(CapabilityType.LOGGING_PREFS, theLoggingPreferences);
            theOptions.setCapability("goog:loggingPrefs", theLoggingPreferences);

            Testcontainers.exposeHostPorts(getTestWebServerPort());

            SELENIUMCONTAINER = new BrowserWebDriverContainer()
                    .withCapabilities(theOptions)
                    .withRecordingMode(BrowserWebDriverContainer.VncRecordingMode.SKIP, new File("."));
            SELENIUMCONTAINER.start();

            Runtime.getRuntime().addShutdownHook(new Thread(() -> SELENIUMCONTAINER.stop()));
        }
        return SELENIUMCONTAINER;
    }
 
@Test
public void honorPresetNoProxyEnvironment() {
    try (
        BrowserWebDriverContainer chromeWithNoProxySet = (BrowserWebDriverContainer) new BrowserWebDriverContainer()
            .withCapabilities(new ChromeOptions())
            .withEnv(NO_PROXY_KEY, NO_PROXY_VALUE)
    ) {
        chromeWithNoProxySet.start();

        Object noProxy = chromeWithNoProxySet.getEnvMap().get(NO_PROXY_KEY);
        assertEquals("no_proxy should be preserved by the container rule", NO_PROXY_VALUE, noProxy);
    }
}
 
@Test
public void provideDefaultNoProxyEnvironmentIfNotSet() {
    try (
        BrowserWebDriverContainer chromeWithoutNoProxySet = new BrowserWebDriverContainer()
            .withCapabilities(new ChromeOptions())

    ) {
        chromeWithoutNoProxySet.start();

        Object noProxy = chromeWithoutNoProxySet.getEnvMap().get(NO_PROXY_KEY);
        assertEquals("no_proxy should be set to default if not already present", "localhost", noProxy);
    }
}
 
@Test
public void createContainerWithShmVolume() {
    try (
        BrowserWebDriverContainer webDriverContainer = new BrowserWebDriverContainer()
            .withCapabilities(new FirefoxOptions())
    ) {
        webDriverContainer.start();

        final List<InspectContainerResponse.Mount> shmVolumes = shmVolumes(webDriverContainer);

        assertEquals("Only one shm mount present", 1, shmVolumes.size());
        assertEquals("Shm mount source is correct", "/dev/shm", shmVolumes.get(0).getSource());
        assertEquals("Shm mount mode is correct", "rw", shmVolumes.get(0).getMode());
    }
}
 
private List<InspectContainerResponse.Mount> shmVolumes(final BrowserWebDriverContainer container) {
    return container.getContainerInfo().getMounts()
        .stream()
        // destination path is always /dev/shm
        .filter(m -> m.getDestination().getPath().equals("/dev/shm"))
        .collect(toList());
}
 
protected static void doSimpleExplore(BrowserWebDriverContainer rule) {
    RemoteWebDriver driver = setupDriverFromRule(rule);
    driver.get("http://en.wikipedia.org/wiki/Randomness");

    // Oh! The irony!
    assertTrue("Randomness' description has the word 'pattern'", driver.findElementByPartialLinkText("pattern").isDisplayed());
}
 
源代码12 项目: testcontainers-java   文件: Selenium3xTest.java
@Test
public void testAdditionalStartupString() {
    try (BrowserWebDriverContainer chrome = new BrowserWebDriverContainer("selenium/standalone-chrome-debug:" + tag)
            .withCapabilities(new ChromeOptions())) {
        chrome.start();
    }
}
 
@Test
public void recordingTestThatShouldBeRecordedAndRetained() {
    File target = vncRecordingDirectory.getRoot();
    try (
        // recordAll {
        // To do this, simply add extra parameters to the rule constructor:
        BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
            .withCapabilities(new ChromeOptions())
            .withRecordingMode(RECORD_ALL, target)
            // }
            .withRecordingFileFactory(new DefaultRecordingFileFactory())
    ) {
        chrome.start();

        doSimpleExplore(chrome);
        chrome.afterTest(new TestDescription() {
            @Override
            public String getTestId() {
                return getFilesystemFriendlyName();
            }

            @Override
            public String getFilesystemFriendlyName() {
                return "ChromeThatRecordsAllTests-recordingTestThatShouldBeRecordedAndRetained";
            }
        }, Optional.empty());

        String[] files = vncRecordingDirectory.getRoot().list(new PatternFilenameFilter("PASSED-.*\\.flv"));
        assertEquals("Recorded file not found", 1, files.length);
    }
}
 
@Test
public void recordingTestThatShouldBeRecordedAndRetained() {
    File target = vncRecordingDirectory.getRoot();
    try (
        // recordFailing {
        // or if you only want videos for test failures:
        BrowserWebDriverContainer chrome = new BrowserWebDriverContainer()
            .withCapabilities(new ChromeOptions())
            .withRecordingMode(RECORD_FAILING, target)
            // }
            .withRecordingFileFactory(new DefaultRecordingFileFactory())
    ) {
        chrome.start();

        doSimpleExplore(chrome);
        chrome.afterTest(new TestDescription() {
            @Override
            public String getTestId() {
                return getFilesystemFriendlyName();
            }

            @Override
            public String getFilesystemFriendlyName() {
                return "ChromeThatRecordsFailingTests-recordingTestThatShouldBeRecordedAndRetained";
            }
        }, Optional.of(new RuntimeException("Force writing of video file.")));

        String[] files = vncRecordingDirectory.getRoot().list(new PatternFilenameFilter("FAILED-.*\\.flv"));
        assertEquals("Recorded file not found", 1, files.length);
    }

}
 
@Test @Ignore
public void testCreationOfManyContainers() {
    for (int i = 0; i < 50; i++) {
        BrowserWebDriverContainer container = new BrowserWebDriverContainer()
                .withCapabilities(new ChromeOptions())
                .withRecordingMode(BrowserWebDriverContainer.VncRecordingMode.RECORD_FAILING, new File("build"));

        container.start();
        RemoteWebDriver driver = container.getWebDriver();

        driver.get("http://www.google.com");

        container.stop();
    }
}
 
源代码16 项目: Bytecoder   文件: BytecoderUnitTestRunner.java
private void testJSBackendFrameworkMethod(final FrameworkMethod aFrameworkMethod, final RunNotifier aRunNotifier, final TestOption aTestOption) {
    if ("".equals(System.getProperty("BYTECODER_DISABLE_JSTESTS", ""))) {
        final TestClass testClass = getTestClass();
        final Description theDescription = Description.createTestDescription(testClass.getJavaClass(), aFrameworkMethod.getName() + " " + aTestOption.toDescription());
        aRunNotifier.fireTestStarted(theDescription);

        try {
            final CompileTarget theCompileTarget = new CompileTarget(testClass.getJavaClass().getClassLoader(), CompileTarget.BackendType.js);

            final BytecodeMethodSignature theSignature = theCompileTarget.toMethodSignature(aFrameworkMethod.getMethod());

            final BytecodeObjectTypeRef theTestClass = new BytecodeObjectTypeRef(testClass.getName());
            final BytecodeMethodSignature theTestClassConstructorSignature = new BytecodeMethodSignature(BytecodePrimitiveTypeRef.VOID, new BytecodeTypeRef[0]);

            final StringWriter theStrWriter = new StringWriter();
            final PrintWriter theCodeWriter = new PrintWriter(theStrWriter);

            final CompileOptions theOptions = new CompileOptions(LOGGER, true, KnownOptimizer.ALL, aTestOption.isExceptionsEnabled(), "bytecoder", 512, 512, aTestOption.isMinify(), aTestOption.isPreferStackifier(), Allocator.linear, additionalClassesToLink, additionalResources, null, aTestOption.isEscapeAnalysisEnabled());
            final JSCompileResult result = (JSCompileResult) theCompileTarget.compile(theOptions, testClass.getJavaClass(), aFrameworkMethod.getName(), theSignature);
            final CompileResult.StringContent content = (CompileResult.StringContent) result.getContent()[0];

            theCodeWriter.println(content.asString());

            final String theFilename = result.getMinifier().toClassName(theTestClass) + "." + result.getMinifier().toMethodName(aFrameworkMethod.getName(), theSignature) + "_" + aTestOption.toFilePrefix() + ".html";

            theCodeWriter.println();

            theCodeWriter.println("console.log(\"Starting test\");");
            theCodeWriter.println("bytecoder.bootstrap();");
            theCodeWriter.println("var theTestInstance = " + result.getMinifier().toClassName(theTestClass) + "." +  result.getMinifier().toSymbol("__runtimeclass") + "." + result.getMinifier().toMethodName("$newInstance", theTestClassConstructorSignature) + "();");
            theCodeWriter.println("try {");
            theCodeWriter.println("     theTestInstance." + result.getMinifier().toMethodName(aFrameworkMethod.getName(), theSignature) + "();");
            theCodeWriter.println("     console.log(\"Test finished OK\");");
            theCodeWriter.println("} catch (e) {");
            theCodeWriter.println("     if (e.exception) {");
            theCodeWriter.println("         console.log(\"Test finished with exception. Message = \" + bytecoder.toJSString(e.exception.message));");
            theCodeWriter.println("     } else {");
            theCodeWriter.println("         console.log(\"Test finished with exception.\");");
            theCodeWriter.println("     }");
            theCodeWriter.println("     console.log(e.stack);");
            theCodeWriter.println("}");

            theCodeWriter.flush();

            final File theWorkingDirectory = new File(".");

            initializeTestWebServer();

            final BrowserWebDriverContainer theContainer = initializeSeleniumContainer();

            final File theMavenTargetDir = new File(theWorkingDirectory, "target");
            final File theGeneratedFilesDir = new File(theMavenTargetDir, "bytecoderjs");
            theGeneratedFilesDir.mkdirs();

            // Copy additional resources
            for (final CompileResult.Content c : result.getContent()) {
                if (c instanceof CompileResult.URLContent) {
                    try (final FileOutputStream fos = new FileOutputStream(new File(theGeneratedFilesDir, c.getFileName()))) {
                        c.writeTo(fos);
                    }
                }
            }

            final File theGeneratedFile = new File(theGeneratedFilesDir, theFilename);
            final PrintWriter theWriter = new PrintWriter(theGeneratedFile);
            theWriter.println("<html><body><script>");
            theWriter.println(theStrWriter.toString());
            theWriter.println("</script></body></html>");
            theWriter.flush();
            theWriter.close();

            initializeWebRoot(theGeneratedFile.getParentFile());

            final URL theTestURL = getTestFileUrl(theGeneratedFile);
            final WebDriver theDriver = theContainer.getWebDriver();
            theDriver.get(theTestURL.toString());

            final List<LogEntry> theAll = theDriver.manage().logs().get(LogType.BROWSER).getAll();
            if (1 > theAll.size()) {
                aRunNotifier.fireTestFailure(new Failure(theDescription, new RuntimeException("No console output from browser")));
            }
            for (final LogEntry theEntry : theAll) {
                LOGGER.info(theEntry.getMessage());
            }
            final LogEntry theLast = theAll.get(theAll.size() - 1);

            if (!theLast.getMessage().contains("Test finished OK")) {
                aRunNotifier.fireTestFailure(new Failure(theDescription, new RuntimeException("Test did not succeed! Got : " + theLast.getMessage())));
            }
        } catch (final Exception e) {
            aRunNotifier.fireTestFailure(new Failure(theDescription, e));
        } finally {
            aRunNotifier.fireTestFinished(theDescription);
        }
    }
}
 
protected void assertBrowserNameIs(BrowserWebDriverContainer rule, String expectedName) {
    RemoteWebDriver driver = setupDriverFromRule(rule);
    String actual = driver.getCapabilities().getBrowserName();
    assertTrue(format("actual browser name is %s", actual),
        actual.equals(expectedName));
}
 
@NotNull
private static RemoteWebDriver setupDriverFromRule(BrowserWebDriverContainer rule) {
    RemoteWebDriver driver = rule.getWebDriver();
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    return driver;
}