簡體   English   中英

如何在 Bitbucket 管道中使用 Webdriver Testcontainer?

[英]How can I use a Webdriver Testcontainer in Bitbucket Pipelines?

嘗試在 Bitbucket 管道中使用 Webdriver Testcontainer 時,我收到以下錯誤消息:

[main] WARN 🐳 [selenium/standalone-chrome:4.1.1] - Unable to mount a file from test host into a running container. This may be a misconfiguration or limitation of your Docker environment. Some features might not work.
[main] ERROR 🐳 [selenium/standalone-chrome:4.1.1] - Could not start container
com.github.dockerjava.api.exception.DockerException: Status 403: {"message":"authorization denied by plugin pipelines: -v only supports $BITBUCKET_CLONE_DIR and its subdirectories"}

我的測試容器版本是 1.17.6

這是我在嘗試排除故障時使用的代碼:

package com.byzpass.demo;

import org.junit.*;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testcontainers.containers.BrowserWebDriverContainer;

public class SeleniumTest {
    public ChromeOptions chromeOptions = new ChromeOptions().addArguments("--no-sandbox").addArguments("--headless").addArguments("--disable-dev-shm-usage");
    @Rule
    public BrowserWebDriverContainer<?> driverContainer = new BrowserWebDriverContainer<>().withCapabilities(chromeOptions);

    @Test
    public void openWikipedia() {
        WebDriver driver = new RemoteWebDriver(driverContainer.getSeleniumAddress(), chromeOptions);
        driver.navigate().to("https://www.wikipedia.org/");
        String subtitleText = driver.findElement(By.cssSelector("#www-wikipedia-org h1 strong")).getText();
        assert subtitleText.equals("The Free Encyclopedia");
        driver.quit();
        System.out.println("Finished opening wikipedia. 📖 🤓  🔍 👍  ✨");
    }
}

這是我的 bitbucket-pipelines.yml:

pipelines:
  default:
    - step:
        image: amazoncorretto:11
        services:
          - docker
        script:
          - export TESTCONTAINERS_RYUK_DISABLED=true
          - cd selenium-test ; bash ./mvnw --no-transfer-progress test

definitions:
  services:
    docker:
      memory: 2048

通過在我的測試方法中設置斷點並使用docker inspect -f '{{.Mounts }}'我能夠發現 selenium/standalone-chrome:4.1.1 圖像的容器具有[{bind /dev/shm /dev/shm rw true rprivate}]

我認為在我的 chrome 選項中使用 --disable-dev-shm-usage 參數可以防止這種情況發生,但事實並非如此。 我不知道這是否是導致我在 Bitbucket 管道中出現問題的原因。

我發現它在將 shm 大小設置為零后有效。 這是有效的代碼:

package com.byzpass.demo;

import org.junit.*;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testcontainers.containers.BrowserWebDriverContainer;

import java.util.ArrayList;

public class SeleniumTest {
    @Test
    public void openWikipedia() {
        ChromeOptions chromeOptions = new ChromeOptions().addArguments("--no-sandbox").addArguments("--headless").addArguments("--disable-dev-shm-usage");
        BrowserWebDriverContainer driverContainer = new BrowserWebDriverContainer<>().withRecordingMode(BrowserWebDriverContainer.VncRecordingMode.SKIP, null);

        driverContainer.setShmSize(0L);

        driverContainer.start();

        WebDriver driver = new RemoteWebDriver(driverContainer.getSeleniumAddress(), chromeOptions);
        driver.navigate().to("https://www.wikipedia.org/");
        String subtitleText = driver.findElement(By.cssSelector("#www-wikipedia-org h1 strong")).getText();
        assert subtitleText.equals("The Free Encyclopedia");
        driver.quit();

        driverContainer.stop();

        System.out.println("Finished opening wikipedia. 📖 🤓  🔍 👍  ✨");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM