Возникла проблема с запуском приложения Selenium внутри докера.JAVA

Программисты JAVA общаются здесь
Anonymous
Возникла проблема с запуском приложения Selenium внутри докера.

Сообщение Anonymous »

Чтобы запустить приложение Java Selenium на отдельном сервере, я пытаюсь создать Dockerfile для установки Chrome и использовать автономный способ запуска браузера. (Это приложение обеспечивает желаемый результат при локальном запуске.) Но при попытке запустить докер я получаю эту ошибку.
Я что-то упустил в сборке докера или предоставленных конфигурациях на основе Java .? Как следует добавлять конфигурации, связанные с драйвером Chrome?
Обновление: Кажется, существует и другой способ запуска Chrome с использованием selenium/standalone-chrome. Можно ли интегрировать Chrome/selenium с другим докером, используя этот метод? какой вариант из этих двух методов предпочтительнее?
OS - Ubuntu 22.04 LTS
Docker version - Docker version 24.0.2, build cb74dfc
Java version - java version "17.0.4" 2022-07-19 LTS
Selenium version - 4.11.0
Chrome version - Google Chrome 120.0.6099.199


ОШИБКА КОНФИГУРАЦИИ: u/BeforeClass openBrowser
org.openqa.selenium.remote.NoSuchDriverException: невозможно получить:
Возможности {browserName: chrome, goog:chromeOptions: {args:
[--remote-allow-origins=*, --headless], расширения: [], prefs:
{download .default_directory: report/}}}, ошибка Команда не выполнена с
кодом: 65, выполнено:
[/tmp/selenium-manager246697546082813077936780283589629/selenium-manager,
--browser, chrome, - -output, json] ошибка тела запроса или ответа: время ожидания операции истекло. Информация о сборке: версия: '4.11.0', ревизия:
'040bc5406b' Информация о системе: os.name: 'Linux', os.arch: ' amd64',
os.version: '5.4.0-150-generic', java.version: '17.0.6' Информация о драйвере:
driver.version: ChromeDriver
at
org.openqa.selenium.remote.service.DriverFinder.getPath(DriverFinder.java:25)
at
org.openqa.selenium.remote.service.DriverFinder.getPath (DriverFinder.java:13)
at
org.openqa.selenium.chrome.ChromeDriver.generateExecutor(ChromeDriver.java:99)
at
org.openqa.selenium.chrome .ChromeDriver.(ChromeDriver.java:88)
at
org.openqa.selenium.chrome.ChromeDriver.(ChromeDriver.java:83)
at
org.openqa.selenium .chrome.ChromeDriver.(ChromeDriver.java:72)
в Infra.BasePage.openBrowser(BasePage.java:108)
Вызвано: org.openqa.selenium.WebDriverException : Команда не выполнена с
кодом: 65, выполнена:
[/tmp/selenium-manager246697546082813077936780283589629/selenium-manager,
--browser, chrome, --output, json] тело запроса или ответа ошибка: время ожидания операции истекло. Информация о сборке: версия: '4.11.0', редакция:
'040bc5406b' Информация о системе: os.name: 'Linux', os.arch: 'amd64',
os. версия: '5.4.0-150-generic', java.version: '17.0.6' Информация о драйвере:
driver.version: ChromeDriver в
org.openqa.selenium.manager.SeleniumManager.runCommand( SeleniumManager.java:151)
at
org.openqa.selenium.manager.SeleniumManager.getDriverPath(SeleniumManager.java:273)
at
org.openqa.selenium.remote. service.DriverFinder.getPath(DriverFinder.java:22)

Это используемый файл Docker
FROM maven:3.9.6-eclipse-temurin-17-alpine AS builder

WORKDIR /app
RUN chmod -R 777 /app

RUN apt update -y & apt install -y wget unzip
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y tzdata

RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
RUN apt-get update
RUN apt-get install -y google-chrome-stable

RUN apt-get install -yqq unzip
RUN wget -O /tmp/chromedriver.zip http://chromedriver.storage.googleapis.com/`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`/chromedriver_linux64.zip
RUN unzip /tmp/chromedriver.zip chromedriver -d /usr/local/bin/

COPY . .

RUN mvn package -DskipTests

FROM eclipse-temurin:17.0.6_10-jdk@sha256:13817c2faa739c0351f97efabed0582a26e9e6745a6fb9c47d17f4365e56327d

WORKDIR /app

COPY report-automation.jar /app/report-automation.jar
COPY src/main/resources/META-INF/MANIFEST.MF /app/META-INF/MANIFEST.MF
COPY src /app/src
COPY src/main/resources/META-INF/MANIFEST.MF /app/META-INF/MANIFEST.MF
COPY src/main/resources/config.properties /app/config.properties
COPY pom.xml /app/pom.xml
COPY testng.xml /app/testng.xml
COPY application.properties /app/application.properties
COPY Configuration.xlsm /app/Configuration.xlsm
COPY apache-maven-3.9.6/ /app/apache-maven-3.9.6/
COPY Downloads /app/Downloads
COPY Logs /app/Logs
COPY report /app/report
COPY Reports /app/Reports

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "report-automation.jar"]

Конфигурации уровня кода, как показано ниже
@Listeners(ExtentReportListener.class)
public class BasePage {
protected WebDriver driver;
private final Properties config = new Properties();
public static Logger logger = LogManager.getLogger(BasePage.class);

public ChromeOptions getOptions() {
ChromeOptions options = new ChromeOptions();
Map prefs = new HashMap();
prefs.put("download.default_directory", config.getProperty("absoluteDownloadLocation"));
options.setExperimentalOption("prefs", prefs);
options.addArguments("--remote-allow-origins=*");
options.addArguments("--headless");

return options;
}

@BeforeClass
public void openBrowser() throws InterruptedException {
Thread.sleep(2000);
driver = new ChromeDriver(getOptions());
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
}

@BeforeTest
public void ClearFolders() throws IOException {
File dictionary = new File(config.getProperty("absoluteDownloadLocation"));
FileUtils.cleanDirectory(dictionary);
}

@AfterClass
public void closeBrowser() throws InterruptedException {
Thread.sleep(2000);
driver.quit();
createBackUpFile();
}
}


Подробнее здесь: https://stackoverflow.com/questions/778 ... the-docker

Вернуться в «JAVA»