Перейти к содержимому

Fruzenshtein

Регистрация: 28 мар 2011
Offline Активность: 02 дек 2019 07:59
-----

Мои темы

Вызов FirefoxDriver из вэб-приложения

01 декабря 2019 - 14:14

Добрй день

 

Я использую 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, из-под которого бежит докер имеет все права на выполнение фаерфокса и гекодрайвера, читал про совместимость версий селениума, вебрайвера и гекодрайвера и т д