-
Notifications
You must be signed in to change notification settings - Fork 189
Error: 'chromedriver' executable needs to be in PATH. #14
Description
I have implemented your dockfile into my project which uses webdriver chrome to run the python test script (using mac OS) . However when tried, it errors out as follows:
Docker file:
Use an official Python runtime as a parent image
FROM python:3.7
ENV APP_DIR /app
WORKDIR $APP_DIR
ENV PYTHONPATH="$PYTHONPATH:/app"
COPY uits uits
COPY requirements.txt requirements.txt
COPY setup.py setup.py
install google chrome
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list'
RUN apt-get -y update
RUN apt-get install -y google-chrome-stable
install chromedriver
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/
set display port to avoid crash
ENV DISPLAY=:99
install selenium
RUN pip install selenium
upgrade pip
RUN pip install --upgrade pip
#install required additional dependencies
RUN pip install -r requirements.txt
Test script look like this:
class SeleniumClient(object):
"""
A wrapper for selenium's client with various handy extensions.
"""
def init(self, params=None, config="default", driver=None):
if driver is not None:
self.driver = driver
return
if params['location'] != "local":
return
root = os.path.dirname(os.path.realpath(__file__))
self.logger.info("%s" , _platform)
if _platform == "darwin":
user = getpass.getuser()
download_folder = "/Users/%s/downloads/" % user
elif "win32" in _platform:
user = getpass.getuser()
download_folder = "/Users/%s/downloads/" % user
elif "linux" in _platform:
download_folder = "/var/lib/docker"
else:
raise NotImplemented("don't know where to save data")
if "chrome" in config:
options = webdriver.ChromeOptions()
preferences = {
"profile.default_content_settings.popups": 0,
"download.default_directory": download_folder,
"credentials_enable_service": 0,
"profile.password_manager_enabled": 0
}
options.add_experimental_option("prefs", preferences)
if config == "chrome":
options.add_argument("--start-fullscreen")
elif config == "chrome_headless":
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument("--window-size=1920, 1200")
self.driver = webdriver.Chrome(executable_path='usr/bin/local',options=options)
