Использование селена с geckodriver и docker-compose для тестирования - PullRequest
0 голосов
/ 24 апреля 2019

Хорошо, я действительно мало знаю о селене, хотя я достаточно выучил, чтобы понять, что я не понимаю, что мне делать. Я использую docker-compose для запуска тестирования mocha в экспресс-приложении. Я уже настроил контейнеры, которые я настроил. Но я не создавал тест на селен, и я не совсем уверен, что делать.

Вот исходный код.

'use strict';

require('geckodriver');

const expect = require('chai').expect;
const webdriver = require('selenium-webdriver');

module.exports = {
    shouldBeLiterate: async function(driver) {
        await driver.get('http://localhost:3000');

        const title = await driver.getTitle();
        expect(title).to.equal('LITERATE');
    },

    centerfoldShouldBeLiterate: async function (driver) {
        await driver.get('http://localhost:3000');

        const centerfold = await driver.findElement(webdriver.By.id('home-title')).getText();

        expect(centerfold).to.equal('LITERATE');
    },

    searchForString: async function (driver, usrStr) {
        await driver.get('http://localhost:3000');

        const searchBox = await driver.findElement(webdriver.By.id('queryField')).sendKeys(usrStr);
        const searchButton = await driver.findElement(webdriver.By.id('search-button'));

        await searchButton.click();
        await driver.wait( driver => {
            return driver.executeScript('if(window.hasOwnProperty("article-title")) return true;');
        }, 10000)

        const result = await driver.findElement(webdriver.By.id('article-title')).getText();
        expect(result).to.not.be.empty();
    },

    searchedStringisinDB: async function (driver, usrStr) {
        await driver.get('http://localhost:3000');

        const searchBox = await driver.findElement(webdriver.By.id('queryField')).sendKeys(usrStr)
        const searchButton = await driver.findElement(webdriver.By.id('search-button'));

        await searchButton.click();
        //maybe check here with postgres database call getMostRecentSearch();
        await driver.wait( driver => {
            return driver.exectureScript('if(window.hasOwnProperty("article-title")) return true;');
        }, 10000)
    }
}

Вот тестирование

'use strict';
const literateHome = require('../../src/api/literateHome.src');
const { describeTest } = require('../../utils/start.config');
const webdriver = require('selenium-webdriver');
const firefox = require('selenium-webdriver/firefox');
const driver = new webdriver.Builder().forBrowser('firefox').build();

describeTest('Home Page Defaults', function () {
    describe('home page texts should be correct', function() {
        it('title should be LITERATE', () => literateHome.shouldBeLiterate(driver)).timeout(50000);
        it('centerfold should be LITERATE', () => literateHome.centerfoldShouldBeLiterate(driver)).timeout(50000);
    }, driver);

    describe('home page should search for specified string', function () {
        const usrStr = require("../../utils/defaults/string.default.json").string;
        it('should search from VIDEO GAMES', () => literateHome.searchForString(driver, usrStr)).timeout(50000);
    }, driver)
}, driver);

Вот докер-сочиняй

version: '3'
services:
  webapp:
    build: ./literate-app 
    command: nodemon -e vue,js,css start.js
    depends_on:
      - postgres
    links:
      - postgres
    environment:
      - DB_HOST=postgres
    ports:
     - "3000:3000"
    networks:
      - literate-net


  server:
    build: ./readability-server
    command: nodemon -L --inspect=0.0.0.0:5555 server.js
    networks:
      - literate-net


  redis_db:
    image: redis:alpine
    networks:
      - literate-net


  postgres:
    restart: 'always'
    #image: 'bitnami/postgresql:latest'
    volumes:
     - /bitnami
    ports:
      - "5432:5432"
    networks:
      - literate-net
    environment:
      - "FILLA_DB_USER=my_user"
      - "FILLA_DB_PASSWORD=password123"
      - "FILLA_DB_DATABASE=my_database"
      - "POSTGRES_PASSWORD=password123"
    build: './database-creation'


  test: 
    image: node:latest
    build: ./test
    working_dir: /literate-app/test
    volumes:
      - .:/literate-app
    command:
      npm run mocha
    networks:
      - literate-net
    depends_on:
      - postgres
    environment:
      - DB_HOST=postgres

  hub:
    image: selenium/hub:3.14.0-gallium
    ports:
      - "4444:4444"
    networks:
      - literate-net

  firefox:
    image: selenium/node-firefox:3.14.0-gallium
    volumes:
      - /dev/shm:/dev/shm
    depends_on:
      - hub
    environment:
      HUB_HOST: hub
    networks:
      - literate-net

  test-ff: 
    build: ./test
    working_dir: /literate-app/test 
    command: npm run mocha-ff
    volumes:
      - .:/literate-app
    networks:
      - literate-net
    depends_on: 
      - postgres 
      - firefox
      - webapp
      - server
    environment:
      HUB_HOST: hub


networks:
  literate-net:
    driver: bridge

Текущий вопрос, который я получаю:

SessionNotCreatedError: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line

Когда я попытался добавить это, он просто сломал его. Я так понимаю, поскольку мы используем конструктор, а не другой метод. Я пытался распечатать текущие возможности. Тем не менее, это просто дает мне обещание в ожидании.

Приложение предоставляет порты 3000. Я знаю, что селен работает на 4444. Когда я изменяю URL-адрес на http://localhost:4444/wd/hub для селена, это не меняет проблему с той же ошибкой с двоичными файлами.

Я ценю любую помощь или руководство по этому вопросу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...