gpt4 book ai didi

angular - Docker 中的 Protractor 测试 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调

转载 作者:行者123 更新时间:2023-12-02 19:36:21 25 4
gpt4 key购买 nike

我已经为我的 Angular2 应用程序使用 Protractor 编写了 6 个 e2e 测试。
测试在我的 windows 10 系统上运行良好。测试是一致的并且始终通过。

现在我正在尝试在 CentOS docker 容器中运行相同的测试。
测试不一致。他们不断失败。

我收到一条错误消息

错误:超时 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调。

我增加了超时,我在需要的地方给出了 browser.wait(直到存在),我增加了分配给 docker 的计算资源(CPU-3,Memory-3328MB)。似乎没有任何效果。

 // Protractor configuration file, see link for more information  

const { SpecReporter } = require('jasmine-spec-reporter');

exports.config = {
allScriptsTimeout: 11000,
specs: [
'./e2e/**/*.e2e-spec.ts'
],
capabilities: {
'browserName': 'chrome',
'chromeOptions': {
'args': [ '--no-sandbox']
}

},
directConnect: false,
baseUrl: 'http://localhost:3200/',
framework: 'jasmine2',
jasmineNodeOpts: {
showColors: true,
defaultTimeoutInterval: 30000,
print: function() {
// NOOP
}
},
beforeLaunch: function() {
require('ts-node').register({
project: 'e2e/tsconfig.e2e.json'
});
},
onPrepare() {
browser.driver.manage().window().maximize();
jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
}
};

测试之一
// create a user and he should be able to login after creation
it('should add a new user and log him in successfully', () => {
browser.wait(until.presenceOf(userCreate.forename, 5000, 'Timed out'));
const forename = 'newUserFore' + generateRandom.generateRandom();
const surename = 'newUserSur' + generateRandom.generateRandom();
const username = 'newUserUser2' + generateRandom.generateRandom();
const password = 'Pass@123' + generateRandom.generateRandom();

userCreate.addUserWithPassword(forename, surename, username, password);
// select language
userCreate.selectDropdownByNumber(userCreate.mylang, 1);
// select role
userCreate.selectDropdownByNumber(userCreate.myrole, 1);
// click add
userCreate.addUserButton.click();
browser.wait(until.presenceOf(userCreate.successMessage, 5000, 'Timed out'));
expect(userCreate.successMessage.getText()).toContain('User saved successfully!');
// cancelbutton
userCreate.cancelbutton.click();
browser.wait(until.presenceOf(userOverview.addUserButton, 5000, 'Timed out'));
// logout
indexPage = homePage.menu.navigateTo(MenuOption.LOGOUT, until);
// click on login button on first page
loginPage = indexPage.loginButtonClickedOnBasePage();
// login with the credentials
browser.wait(until.presenceOf(loginPage.loginTitle, 5000, 'Timed out'));
loginPage.login(username, password);
browser.wait(until.presenceOf(menu, 5000, 'Timed out'));
expect(menu.isDisplayed()).toBe(true);
});

功能测试文件,我首先在其中启动服务器然后运行 ​​ui
     #!/usr/bin/env bash
echo "API: Ensuring the port $API_SERVER_PORT is freed."
fuser -k -n tcp $API_SERVER_PORT


echo " Starting the server in detached mode. This will take about 5 minutes the first time "
cd ../api && mvn spring-boot:run -D server.port=$API_SERVER_PORT >> api-start.log 2>&1 &

# Wait for the server to come up..
while ! (ncat -w 1 127.0.0.1 $API_SERVER_PORT </dev/null >/dev/null 2>&1); do sleep 1; done
echo "Server started on port $API_SERVER_PORT"


echo "UI: Ensuring the port $UI_SERVER_PORT is freed."
fuser -k -n tcp $UI_SERVER_PORT

npm start >> ui-start.log 2>&1 &

while ! (ncat -w 1 127.0.0.1 $UI_SERVER_PORT </dev/null >/dev/null 2>&1); do sleep 1; done
echo "Angular app is running on port $UI_SERVER_PORT , startup logs is in start.log".

protractor container.protractor.conf.js

最佳答案

你试过卷挂载主机的/dev/shm吗?到容器?

https://github.com/SeleniumHQ/docker-selenium#running-the-images

这显然是一种已知的解决方法,可以阻止 selenium 在 Docker 中与 Chrome 或 Firefox 一起崩溃。 selenium 崩溃并没有立即显现出来,它只是通过 Jasmine 超时来表达。

关于angular - Docker 中的 Protractor 测试 - 在 jasmine.DEFAULT_TIMEOUT_INTERVAL 指定的超时内未调用异步回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44719296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com