简体   繁体   中英

Github Action with selenium and docker

I am currently working on a CI pipeline for a project and just started setting up a Github Action for running integration tests but I can't get it to work.

My action looks like this:

name: Integration Tests

on:
  push:
    branches: 
      - main

  workflow_dispatch:

jobs:
  integration-tests:
    runs-on: ubuntu-latest

    services:
      selenium:
        image: selenium/standalone-chrome:latest
        ports: 
          - 4444:4444
        options: --shm-size="2g"


    steps:
    - uses: actions/checkout@v2
    - name: Get IP Address
      run: echo "##[set-output name=ip;]$(ifconfig eth0 | grep 'inet [0-9\.]* ' -o | sed 's/[^0-9\.]//g')"
      id: ip_addr 
      
    - name: Setup Pyhon
      uses: actions/setup-python@v2
      with:
        python-version: '3.8'
        
    - name: Install Python dependencies
      uses: py-actions/py-dependency-install@v2
      with: /path/to/requirements

    - name: Run Tests
      run: python3 main.py --backend http://localhost:8080/ --frontend http://${{ steps.ip_addr.outputs.ip }}:4200 --selenium http://localhost:4444/wd/hub

main.py starts two docker containers (that expose their corresponding ports) and runs a suite of selenium tests. It works on my local machine with a container I run using docker run -d -p 4444:4444 --shm-size="2g" selenium/standalone-chrome:latest . It takes the url for the backend and the one for the frontend, which gets used by selenium. I think I have to use the IP address of the runner so selenium can access the site (since it runs locally, localhost doesn't work), but it fails with the following error:

  File "main.py", line 57, in <module>
    testcase.run()
  File "/home/runner/work/PROJECT_NAME/QualityAssurance/integration_tests/test_cases/t1.py", line 14, in run
    self.web_driver.accept_cookies()
  File "/home/runner/work/PROJECT_NAME/QualityAssurance/integration_tests/test_utils/parkview_webdriver.py", line 64, in accept_cookies
    self.wait_and_click(By.ID, 'confirmCookies')
  File "/home/runner/work/PROJECT_NAME/QualityAssurance/integration_tests/test_utils/parkview_webdriver.py", line 30, in wait_and_click
    WebDriverWait(self.driver, 10).until(
  File "/opt/hostedtoolcache/Python/3.8.11/x64/lib/python3.8/site-packages/selenium/webdriver/support/wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: 

It seems to just not load the time, but I don't know to fix this. I guess it could also be that I messed up the networking somehow?

I think the service container is referenced by the service name instead of localhost. ie in your example:

--selenium http://localhost:4444/wd/hub

would be:

--selenium http://selenium:4444/wd/hub

as you defined it:

services:
  selenium:

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM