Добрй день
Я использую Selenium WebDriver не для целей тестирования, а как часть бизнес логики в вэб-приложении — когда приходит запрос на сервер (GET /run-selenium), то по его параметрам формируется некий адрес, который открывается с помощью FirefoxDriver'a.
Вот часть кода, которая грубо говоря передает то, что происходит с вэбрайвером
val firefoxBinary = new FirefoxBinary()
firefoxBinary.addCommandLineOptions("--headless")
val firefoxOptions = new FirefoxOptions()
firefoxOptions.setBinary(firefoxBinary)
val webDriver = new FirefoxDriver(firefoxOptions)
webDriver.get(s"https://google.com")
webDriver.manage().timeouts().pageLoadTimeout(5, TimeUnit.SECONDS)
logger.info(s"Title: ${webDriver.getTitle}")
webDriver.close()
Локально все отрабатывает, как надо. Но когда я запаковываю приложение в докер, то я получаю такую ошибку:
Error servicing request: GET /run-selenium from 172.17.0.1 {{ org.openqa.selenium.WebDriverException: java.net.ConnectException: Failed to connect to localhost/127.0.0.1:9340
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: '4fb27eff9adc', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.184-linuxkit', java.version: '1.8.0_212'
Driver info: driver.version: FirefoxDriver }}
org.openqa.selenium.WebDriverException: java.net.ConnectException: Failed to connect to localhost/127.0.0.1:9340
Build info: version: '3.141.59', revision: 'e82be7d358', time: '2018-11-14T08:17:03'
System info: host: '4fb27eff9adc', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.9.184-linuxkit', java.version: '1.8.0_212'
Driver info: driver.version: FirefoxDriver
at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:92)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:552)
at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:213)
at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:131)
at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:147)
at com.vidiq.seleniumkill.http.PublicRouter$$anonfun$httpService$1.applyOrElse(Router.scala:25)
at com.vidiq.seleniumkill.http.PublicRouter$$anonfun$httpService$1.applyOrElse(Router.scala:17)
at scala.PartialFunction$Lifted.apply(PartialFunction.scala:228)
at scala.PartialFunction$Lifted.apply(PartialFunction.scala:224)
at org.http4s.HttpRoutes$.$anonfun$of$2(HttpRoutes.scala:64)
at zio.RIO$.$anonfun$effectSuspend$1(RIO.scala:207)
at zio.internal.FiberContext.liftedTree1$1(FiberContext.scala:486)
at zio.internal.FiberContext.evaluateNow(FiberContext.scala:486)
at zio.internal.FiberContext.$anonfun$fork$1(FiberContext.scala:596)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
В качестве базового докер имэдажа я использую:
FROM openjdk:8-jre-alpine3.9
ARG firefox_ver=70.0
ARG geckodriver_ver=0.26.0
# Download and install deps
RUN apk update && apk add curl curl-dev
RUN mkdir /opt/docker && chmod a=rwX /opt/docker
# Download and install Firefox
RUN curl -fL -o /tmp/firefox.tar.bz2 https://ftp.mozilla....refox/releases/${firefox_ver}/linux-x86_64/en-GB/firefox-${firefox_ver}.tar.bz2 \
&& tar -xjf /tmp/firefox.tar.bz2 -C /tmp/ && mv /tmp/firefox /opt/docker
# Download and install geckodriver
RUN curl -fL -o /tmp/geckodriver.tar.gz \
https://github.com/m...ases/download/v${geckodriver_ver}/geckodriver-v${geckodriver_ver}-linux64.tar.gz \
&& tar -xzf /tmp/geckodriver.tar.gz -C /tmp/ && chmod +x /tmp/geckodriver && mv /tmp/geckodriver /opt/docker
ENV PATH="/opt/docker/firefox:${PATH}"
Кто может подсказать в где может быть причина подобного поведения селениума?
Я уже убедился, что linux user, из-под которого бежит докер имеет все права на выполнение фаерфокса и гекодрайвера, читал про совместимость версий селениума, вебрайвера и гекодрайвера и т д