angular - 如何运行包含 Angular 的 dockerized protractor 项目?
问题描述
我是量角器的新手。我用 angular 创建了一个项目,它在没有 docker 的情况下工作正常。但是,当我构建图像时,它已成功创建。不幸的是无法运行那个。
文件夹:量角器内容如下
.
./Dockerfile
./protractor.sh
./protractor.conf.js
./package-lock.json
./node_modules
./package.json
./specs
我已经使用此命令手动运行它
protractor$ ./protractor.sh protractor.conf.js
然后结果如下
[14:36:13] I/launcher - Running 1 instances of WebDriver
[14:36:13] I/local - Starting selenium standalone server...
[14:36:14] I/local - Selenium standalone server started at http://192.168.8.103:53238/wd/hub
[14:36:14] I/start - java -Djava.security.egd=file:///dev/./urandom -Dwebdriver.gecko.driver=/usr/lib/node_modules/protractor/node_modules/webdriver-manager/selenium/geckodriver-v0.29.1 -Dwebdriver.chrome.driver=/usr/lib/node_modules/protractor/node_modules/webdriver-manager/selenium/chromedriver_90.0.4430.24 -jar /usr/lib/node_modules/protractor/node_modules/webdriver-manager/selenium/selenium-server-standalone-3.141.59.jar -port 4444
[14:36:14] I/start - seleniumProcess.pid: 14964
14:36:14.643 INFO [GridLauncherV3.parse] - Selenium server version: 3.141.59, revision: e82be7d358
14:36:14.710 INFO [GridLauncherV3.lambda$buildLaunchers$3] - Launching a standalone Selenium Server on port 4444
2021-05-23 14:36:14.744:INFO::main: Logging initialized @260ms to org.seleniumhq.jetty9.util.log.StdErrLog
14:36:14.951 INFO [WebDriverServlet.<init>] - Initialising WebDriverServlet
14:36:15.069 INFO [SeleniumServer.boot] - Selenium Server is up and running on port 4444
Started
[14:36:20] W/element - more than one element found for locator By(css selector, .ng-binding) - the first result will be used
.
1 spec, 0 failures
Finished in 7.482 seconds
[14:36:22] I/local - Shutting down selenium standalone server.
[14:36:22] I/launcher - 0 instance(s) of WebDriver still running
[14:36:22] I/launcher - chrome #01 passed
Docker构建命令如下
sudo docker build -t priyanwso2/protractor-docker .
Sending build context to Docker daemon 36.5MB
Step 1/8 : FROM node:latest
---> 7493e35c7ffa
Step 2/8 : WORKDIR /tmp
---> Using cache
---> d1941bcedacd
Step 3/8 : RUN apt-get update --fix-missing && apt-get install -y xvfb wget openjdk-11-jre-headless libgconf-2-4 libexif12 chromium && apt-get clean
---> Using cache
---> 0f440f61b0f9
Step 4/8 : RUN mkdir /protractor && npm install -g protractor
---> Using cache
---> eca289196866
Step 5/8 : RUN webdriver-manager update
---> Using cache
---> fa2d0cc0ca06
Step 6/8 : ADD protractor.sh /protractor.sh
---> Using cache
---> 83ef2046c6b0
Step 7/8 : WORKDIR /protractor
---> Using cache
---> 0f7bb601e197
Step 8/8 : ENTRYPOINT ["/protractor.sh"]
---> Using cache
---> a25c6c8f566b
Successfully built a25c6c8f566b
Successfully tagged priyanwso2/protractor-docker:latest
当我运行 docker images 时,它在 docker images list 中列出
priyanwso2/protractor-docker latest a25c6c8f566b 47 minutes ago 1.69GB
当我尝试运行 docker 映像时,它会给出以下错误
sudo docker run priyanwso2/protractor-docker protractor.conf.js
[09:09:57] E/configParser - Error code: 105
[09:09:57] E/configParser - Error message: failed loading configuration file protractor.conf.js
[09:09:57] E/configParser - Error: Cannot find module '/protractor/protractor.conf.js'
Require stack:
- /usr/local/lib/node_modules/protractor/built/configParser.js
- /usr/local/lib/node_modules/protractor/built/launcher.js
- /usr/local/lib/node_modules/protractor/built/cli.js
- /usr/local/lib/node_modules/protractor/bin/protractor
at Function.Module._resolveFilename (node:internal/modules/cjs/loader:941:15)
at Function.Module._load (node:internal/modules/cjs/loader:774:27)
at Module.require (node:internal/modules/cjs/loader:1013:19)
at require (node:internal/modules/cjs/helpers:93:18)
at ConfigParser.addFileConfig (/usr/local/lib/node_modules/protractor/built/configParser.js:135:26)
at Object.initFn [as init] (/usr/local/lib/node_modules/protractor/built/launcher.js:93:22)
at Object.<anonymous> (/usr/local/lib/node_modules/protractor/built/cli.js:227:10)
at Module._compile (node:internal/modules/cjs/loader:1109:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1138:10)
at Module.load (node:internal/modules/cjs/loader:989:32)
操作系统 Ubuntu 18.04 LTS(64 位)
Dockerfile
FROM node:latest
WORKDIR /tmp
RUN apt-get update --fix-missing && \
apt-get install -y xvfb wget openjdk-11-jre-headless libgconf-2-4 libexif12 chromium && \
apt-get clean
RUN mkdir /protractor && \
npm install -g protractor
RUN webdriver-manager update
ADD protractor.sh /protractor.sh
WORKDIR /protractor
ENTRYPOINT ["/protractor.sh"]
package.json 文件如下
{
"name": "test",
"version": "1.0.0",
"description": "Test e2e package",
"main": "conf.js",
"dependencies": {
"chromedriver": "^90.0.1",
"jasmine": "^3.7.0",
"protractor": "^7.0.0",
"webdriver-manager": "^12.1.8"
},
"scripts": {
"test": "protractor.conf.js"
},
"author": "SOAS",
"license": "ISC"
}
protractor.conf.js 如下
exports.config = {
multiCapabilities: [{browserName: 'chrome'}],
specs: ['specs/superCalculatorTest.js' ],
onPrepare: function(){browser.ignoreSynchronization = true;},
};
有关 protractor.sh 中的代码,请参见此处
#!/bin/bash
webdriver-manager start &
protractor $@
在 specs 文件夹下存在一个 js (superCalculatorTest.js)。这是它的代码
const { $, browser } = require("protractor");
let url = 'https://juliemr.github.io/protractor-demo/';
describe('Super Calculator Test suite', () => {
it('Verify Adding two Integers', () => {
browser.get(url);
browser.sleep(2000);
element(by.model('first')).sendKeys(2);
element(by.model('second')).sendKeys(5);
element(by.id('gobutton')).click();
browser.sleep(2000);
expect(element(by.className('ng-binding')).getText()).toEqual('7');
browser.sleep(2000);
});
});
请帮忙解决这个问题。我使用这个中等页面来编写测试部分。 https://bytes.grubhub.com/end-to-end-testing-with-docker-71008dca11a0
解决方案
您缺少 dockerfile 中最重要的部分。您需要将所有文件复制到容器中。您正在运行mkdir
,然后立即运行npm install
,但您的protractor
目录中没有任何内容。它是空的。
COPY /path/to/source /path/to/destination
推荐阅读
- dbt - 找不到适配器类型 bigquery
- python - 用于healpy.query_disc() 的坐标系
- react-native - 如何仅使用导航参考来推送屏幕
- java - 从扫描的字符串句子中删除第一个单词如何与 Scanner 类一起使用?
- html - HTML语义:没有用于删除项目的输入字段的表单
- reactjs - Fetch 和 setInterval 反应钩子问题
- sql-server - Varchar(255) 作为 MM/DD/YYYY HH:MM 到日期时间格式 - SQL Server
- c - c 中的 SIG_IGN 信号处理程序,如何终止程序?
- scala - 是否可以使用默认值定义两个隐式
- apache-kafka - Camel - RoutePolicy - ThrottlingExceptionRoutePolicy 不适用于多个消费者