2017-10-08 212 views
1

由於我對當前項目的情況,我需要將2個碼頭圖像一起用於硒測試。從另一個碼頭集裝箱運行Zalenium的硒命令

一個叫做Zalenium。我已經完成並通過docker-compose演示工作。它基本上像硒碼頭回購,除了這可以記錄視頻,並顯示你現場進展。

zalenium: 
     image: "dosel/zalenium" 
     container_name: zalenium 
     hostname: zalenium 
     tty: true 
     volumes: 
      - /Users/josephastrahan/seluser/videos:/home/seluser/videos 
      - /var/run/docker.sock:/var/run/docker.sock 
      - /usr/bin/docker:/usr/bin/docker 
     ports: 
      - 4444:4444 
     command: > 
      start --chromeContainers 1 
       --firefoxContainers 1 
       --maxDockerSeleniumContainers 8 
       --screenWidth 800 --screenHeight 600 
       --timeZone "Europe/Berlin" 
       --videoRecordingEnabled true 
       --sauceLabsEnabled false 
       --browserStackEnabled false 
       --testingBotEnabled false 
       --startTunnel false 
     environment: 
      - HOST_UID 
      - HOST_GID 
      - SAUCE_USERNAME 
      - SAUCE_ACCESS_KEY 
      - BROWSER_STACK_USER 
      - BROWSER_STACK_KEY 
      - TESTINGBOT_KEY 
      - TESTINGBOT_SECRET 

另一個圖像是具有摩卡和硒的NodeJS-的webdriver的(NPM封裝)一個服務器的NodeJS預先安裝,這樣我可以運行的命令來觸發瀏覽器的自動化。這裏的詳細信息(https://github.com/SeleniumHQ/selenium/tree/master/javascript/node/selenium-webdriver)和這裏(https://hub.docker.com/r/qmu1/selenium-webdriver-node/

您可以看到從docker運行的Zalenium在這裏組成很好。我可以看到時間每秒更新一次,所以它絕對顯示實時視圖。

enter image description here

根據對我使用的其他搬運工容器,是在這裏(https://hub.docker.com/r/qmu1/selenium-webdriver-node/)的文件,我應該能夠與這樣的泊塢窗命令只需運行測試。

HERE=$(pwd) 

echo "" 
echo "----------------------------" 
echo "Running an example" 
echo "----------------------------" 
echo "" 

docker run -it --rm \ 
    -v $HERE:/workspace \ 
    qmu1/selenium-webdriver-node:latest /bin/sh -c " 
     mocha sample.js --timeout=10000 
" 

我改變了這個命令,以適應我的需要,直到它似乎喜歡它的工作。

docker run -it --rm --net=distributiontech_default -v $HERE:/workspace qmu1/selenium-webdriver-node:latest /bin/sh -c "mocha tests/seleniumtest.js --timeout=10000" 

我得到的迴應:

all modules are ready! 


    0 passing (1ms) 

問題是...在Zalenium我沒有看到任何事情發生在瀏覽器上,以驗證它甚至工作?

我的硒腳本如下所示。

//Run using this project (https://github.com/qmu/dockerfiles/blob/master/src/selenium-webdriver-node/example/bin/run) 

"use strict"; 

const webdriver = require('selenium-webdriver'), 
    By = webdriver.By, 
    until = webdriver.until, 
    test = require('selenium-webdriver/testing'); 

const expect = require('expect.js'); 
const assert = require('assert'); 

// var driver = new webdriver.Builder() 
// .withCapabilities(webdriver.Capabilities.chrome()) 
// .usingServer('http://localhost:4444/wd/hub') 
// .build(); 

var driver = new webdriver.Builder() 
    .forBrowser('firefox') 
    .usingServer('http://zalenium:4444/wd/hub') 
    .build(); 

driver.get('http://www.google.com'); 
driver.findElement(webdriver.By.name('q')).sendKeys('simple programmer'); 
driver.findElement(webdriver.By.name('btnG')).click(); 
//driver.quit(); 

console.log('all modules are ready!'); 

我試過沒有--net命令和...沒有運氣。只是這樣你才能看到網絡細節和容器的運行。您可以看到zalenium已添加到distributiontech_default網絡。

enter image description here

enter image description here

enter image description here

如何連接運行的硒代碼運行Zalenium泊塢窗樞紐泊塢窗容器?

我試圖將此更改爲...

var driver = new webdriver.Builder() 
    .forBrowser('firefox') 
    .usingServer('http://localhost:4444/wd/hub') 
    .build(); 

,但沒有運氣無論是。我可以把任何虛假的地址,我想要的地方它說本地主機,它似乎沒有拋出任何錯誤或任何奇怪的足夠。

+0

只是想更新我最近做了一個新的腳本,並在我自己的機器上本地測試zalenium,它工作正常。我似乎無法讓其他碼頭容器訪問zalenium。換句話說,我可以確認zalenium直接在我的本地機器上工作,但不能從另一個試圖訪問它的Docker容器中運行。 –

+0

有沒有其他人能夠成功地做到這一點? –

回答

1

嗯,我不知道我做了什麼,但其中一個步驟讓它突然工作。我認爲這是我寫劇本的方式。

首先使用docker容器進行摩卡測試,這裏是我使用的命令。

docker run -it --rm --net=distributiontech_main -v $HERE:/workspace qmu1/selenium-webdriver-node:latest /bin/sh -c "mocha tests/seleniumtest.js --timeout=10000" 

注意你會想是正確--net(網絡)和體積的正確位置,並使用正確的.js文件路徑爲自己。

我用我加入到最底部

networks: 
    main: 

然後因爲我把每個服務

我作曲文件...

networks: 
      - main 

網絡名稱將默認爲您的項目命名爲用_和您在作曲家文件中定義的名稱。使用命令docker network ls查看您當前的網絡。您可以用docker network rm networknamehere清除舊的未使用的,只是不要刪除橋,主機或無,因爲它們是默認值。

這一步放在網絡上可能不是必需的,因爲默認情況下是從docker撰寫創建的。您可以使用docker network ls命令查看它。

爲我工作的一個實例硒的文件是這樣的......

"use strict"; 

var webdriver = require('selenium-webdriver'), 
     { describe, it, after, before } = require('selenium-webdriver/testing'), 
     By = webdriver.By, 
     until = webdriver.until; 
     var driver; 

    describe('Login Test', function() { 
      this.timeout(50000);//50 seconds 

      beforeEach(function(){ 
       driver = new webdriver.Builder() 
        .withCapabilities({'browserName': 'chrome','name':'Chrome Test','tz':'America/Los_Angeles','build':'Chrome Build','idleTimeout':'60'}) 
        .usingServer('http://zalenium:4444/wd/hub') 
        .build(); 

       driver.get('http://distribution.tech.sel'); 

      }); 

      afterEach(function(){ 
        driver.quit(); 
      }); 

      //this.timeout(20000); 

      it('Should show welcome message after entering credentials', function() { 
       driver.findElement(By.name('_username')).sendKeys('**'); 
       driver.findElement(By.name('_password')).sendKeys('**'); 
       driver.findElement(By.css("button")).click(); 

      }); 

      it('The title should say something interesting', function() { 

      }); 

      it('And this thing too...', function() { 

      }); 
}); 

注意這裏的關鍵是我指的zalenium這是不一樣的網絡,.usingServer('http://zalenium:4444/wd/hub')上,這樣可以解決自動獲得IP地址和該腳本能夠輕鬆找到zalenium服務器。

另一件事是因爲我有我的網站上另一個容器,我添加了這個使它更容易訪問作曲家文件。

networks: 
      main: 
       aliases: 
        - distribution.tech.sel 

這將替換

networks: 
-main 

它創建了一個別名,這樣你就可以使用域名訪問時,提及該項目。技術上來說,在我的作曲家文件中,我調用了服務'web',我可以這樣訪問它,但是我的網站使用域名信息來決定它是否處於beta或dev模式,因此在連接到它時提供適當的域是非常重要的在我的情況。

希望這可以幫助別人。

實例整個dockercompose.yml文件

version: "3" 
services: 
    dblive: 
     image: mysql:5.5.52 
     volumes: 
      - ./db_data_live:/var/lib/mysql 
     restart: always 
     environment: 
      MYSQL_ROOT_PASSWORD: ** 
      MYSQL_DATABASE: ** 
      MYSQL_USER: ** 
      MYSQL_PASSWORD: ** 
     networks: 
      - main 

    dbdev: 
     image: mysql:5.5.52 
     volumes: 
      - ./db_data_dev:/var/lib/mysql 
     restart: always 
     environment: 
      MYSQL_ROOT_PASSWORD: ** 
      MYSQL_DATABASE: ** 
      MYSQL_USER: ** 
      MYSQL_PASSWORD: ** 
     networks: 
      - main 

    phpmyadmin: 
     depends_on: 
      - dblive 
      - dbdev 
     image: phpmyadmin/phpmyadmin 
     environment: 
      PMA_ARBITRARY : 1 
     restart: always 
     ports: 
      - "8081:80" 
     networks: 
      - main 

    zalenium: 
     image: "dosel/zalenium" 
     container_name: zalenium 
     hostname: zalenium 
     tty: true 
     volumes: 
      - /Users/josephastrahan/seluser/videos:/home/seluser/videos 
      - /var/run/docker.sock:/var/run/docker.sock 
      - /usr/bin/docker:/usr/bin/docker 
     ports: 
      - 4444:4444 
     command: > 
      start --chromeContainers 2 
       --firefoxContainers 2 
       --maxDockerSeleniumContainers 8 
       --screenWidth 800 --screenHeight 600 
       --timeZone "America/Los_Angeles" 
       --videoRecordingEnabled true 
       --sauceLabsEnabled false 
       --browserStackEnabled false 
       --testingBotEnabled false 
       --startTunnel false 
     environment: 
      - HOST_UID 
      - HOST_GID 
      - SAUCE_USERNAME 
      - SAUCE_ACCESS_KEY 
      - BROWSER_STACK_USER 
      - BROWSER_STACK_KEY 
      - TESTINGBOT_KEY 
      - TESTINGBOT_SECRET 
     networks: 
      main: 
       aliases: 
        - zalenium.test 

    web: 
     #build: ./ 
     depends_on: 
      - dblive 
      - dbdev 
      - zalenium 
     image: ** 
     volumes: 
      - ./web:/var/www 
      - ./config/custom.php.ini:/etc/php5/apache2/conf.d/custom.php.ini 
      - ./logs/apache_error.log:/var/log/apache2/error.log 
      - ./logs/apache_access.log:/var/log/apache2/access.log 
      - ./config/apache_default.conf:/etc/apache2/sites-available/000-default.conf 
      - ./config/apache_default-ssl.conf:/etc/apache2/sites-available/default-ssl.conf 
      - ./config/ssl/apache.key:/etc/apache2/ssl/apache.key 
      - ./config/ssl/apache.crt:/etc/apache2/ssl/apache.crt 
      - ./web/public_html/livesite:/app 
      - ./web/public_html/devsite:/appdev 
     restart: always 
     ports: 
      #Standard HTTP Port 
      - "80:80" 
      #Below allows access to local computer from outside ports 
      - "8080:80" 
      #Standard SSH Port 
      - "443:443" 
      #Below allows access to local computer from outside ports for SSH Testing 
      - "4443:443" 
     extra_hosts: 
      - "distribution.tech:127.0.0.1" 
      - "dev.distribution.tech:127.0.0.1" 
      - "distribution.tech.local:127.0.0.1" 
      - "dev.distribution.tech.local:127.0.0.1" 
     networks: 
      main: 
       aliases: 
        - distribution.tech.sel 
     # external_links: 
     #  - web:dev.distribution.tech 
     #  - web:distribution.tech 
networks: 
    main: 
1

我也有類似的問題,我發現我可以使用--link命令,所以我可以與泊塢窗實例鏈接命名Zalenium網格實例它執行我的測試:

docker run --privileged --name stg-selenium-client --rm=true --link zalenium:hub hub.platformservices.io/sbg_core_automation/core-test-runner-with-maven-dependencies:0.12 <command to execute tests> 
+0

是的,這也是工作,這是沒有碼頭構成的手動方式 –

相關問題