๋๋ " http://www.protractortest.org/#/tutorial "์ ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
// spec.js
describe('Protractor Demo App', function() {
it('should have a title', function() {
browser.get('http://juliemr.github.io/protractor-demo/');
expect(browser.getTitle()).toEqual('Super Calculator');
});
});
// conf.js
exports.config = {
framework: 'jasmine',
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['spec.js']
}
์ด์ ๋ค์์ผ๋ก ํ ์คํธ๋ฅผ ์คํํ์ญ์์ค.
protractor conf.js
๊ทธ๋ฐ ๋ค์ ์ฝ์์ ๋ค์์ด ํ์๋ฉ๋๋ค.
์๋ ๊ฒ์๋ฌผ์์ ํด๊ฒฐ์ฑ ์ ์ฐพ์ ์ ์์ต๋๋ค. ์ ์ฒด ๊ฒ์๋ฌผ์ ์ดํด๋ณด์ธ์.
https://github.com/angular/protractor/issues/2941#issuecomment -186104304
์
๋ ๋์ ์ฑ๊ณต์ ์ผ๋ก ์์ํ ์ ์์ต๋๊น? directConnect
๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น?
์ค๋๋ ๋ฌธ์ ๋ฅผ ๋ซ์ต๋๋ค.
๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ณ ๋ค๋ฅธ ๊ฒ์๋ฌผ ์ด ์ ์๊ฒ ํจ๊ณผ์ ์ด์ง ์์ต๋๋ค.
@juliemr ์ด์ ๋ํ ํด๊ฒฐ์ฑ
์ด ์์ต๋๊น? allScriptsTimeout: 900000์ ์๋ํ์ง๋ง ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์์ต๋๋ค.
์ ์๊ฒ๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค. defaultTimeoutInterval์ ๋๋ ค๋ ํด๊ฒฐ๋์ง ์์ต๋๋ค.
@juliemr ์ ๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๊ณ ScriptsTimeout์ ๋๋ ค๋ ํจ๊ณผ๊ฐ ์์ต๋๋ค. ์ด์ ๋ํ ํด๊ฒฐ์ฑ ์ด ์์ต๋๊น? ๊ฐ์ฌํฉ๋๋ค.
์๋ ๋ชจ๋,
์๊ฐ ์ด๊ณผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฐ๋๊ธฐ์์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์คํ ์ค์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์กฐ์ธ ๋ถํ๋๋ฆฝ๋๋ค. ๊ฐ์ฌํฉ๋๋ค
์ค๋ฅ: ์๊ฐ ์ด๊ณผ - jasmine.DEFAULT_TIMEOUT_INTERVAL์ ์ง์ ๋ ์๊ฐ ์ด๊ณผ ๋ด์ ๋น๋๊ธฐ ์ฝ๋ฐฑ์ด ํธ์ถ๋์ง ์์์ต๋๋ค.
sample_spec.js
describe('Mcac ์ฑ ํ
์คํธ', function() {
browser.get('http://localhost:3000/integrated/myWeb.html');
beforeEach(ํจ์(์๋ฃ) {
window.jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
setTimeout(ํจ์() {
console.log('์๊ฐ ์ด๊ณผ');
์๋ฃ();
}, 50000);
});
//browser.get(' http://localhost:3000/integrated/myWeb.html');
// browser.get('http://localhost:3000/integrated/myWeb.html').then(function() {
it('์ด๋ฉ์ผ ์ฃผ์ ํ์ธ', function()
{
element(by.model('ctrl.formData.emailAddress')).sendKeys('').clear();
element(by.model('ctrl.formData.emailAddress')).sendKeys('[email protected]');
element(by.model('ctrl.formData.emailAddress')).getAttribute('value').then(function (value) {
expect(value).toEqual('[email protected]');
});
}, 10000);
// element(by.xpath("//button[text()='ํ์ธ']")).click();
๋ธ๋ผ์ฐ์ .์๋ฉด(5000);
});
config.js
// ์์ ๊ตฌ์ฑ ํ์ผ์
๋๋ค.
export.config = {
์ง์ ์ฐ๊ฒฐ: ์ฌ์ค,
// ์น๋๋ผ์ด๋ฒ ์ธ์คํด์ค์ ์ ๋ฌ๋ ๊ธฐ๋ฅ.
๋ฅ๋ ฅ: {
'๋ธ๋ผ์ฐ์ ์ด๋ฆ': 'ํฌ๋กฌ'
},
// ์ฌ์ฉํ ํ๋ ์์ํฌ. ์์ค๋ฏผ์ ์ถ์ฒํฉ๋๋ค.
ํ๋ ์์ํฌ: '์ฌ์ค๋ฏผ',
// ์ฌ์ ํจํด์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ํ์ฌ ์์
๋๋ ํ ๋ฆฌ์ ์๋์ ์
๋๋ค.
// ๊ฐ๋๊ธฐ๊ฐ ํธ์ถ๋ฉ๋๋ค.
// ์ฌ์: ['example_spec.js'],
//์ฌ์: ['mcac_spec.js'],
//์ฌ์: ['mcac_spec_mobile.js'],
์ฌ์: ['mcac_online.js'],
// Jasmine์ ์ ๋ฌํ ์ต์
.
jasmineNodeOpts: {
๊ธฐ๋ณธ ์๊ฐ ์ด๊ณผ ๊ฐ๊ฒฉ: 5000
}
};
๋ง์ ๋์์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๋๋์ด ๋ฌธ์ ๊ฐ ์์๊ณ ๋ฐ๋ณต๋๋ $timeout
๋๋ฌธ์ด์์ต๋๋ค( $timeout
๋ ๊ฐ๋๊ธฐ๋ฅผ ์ฐจ๋จํ์ง๋ง $interval
๋ ์ฐจ๋จํ์ง ์์).
๋ฐ๋ณต๋๋ $timeout์ ์ฐพ์ผ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๊ฐ๋๊ธฐ์ ์์ ํ์๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
$ protractor config/protractor.js --elementExplorer
Starting debugger agent.
Debugger listening on port 5858
> var body = element(by.css('body'))
> body.isPresent()
ScriptTimeoutError: Timed out waiting for asynchronous Angular tasks to finish after 15 seconds. This may be because the current page is not an Angular application. Please see the FAQ for more details: https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting-for-angular
While waiting for element with locator - Locator: By(css selector, body).
The following tasks were pending:
- $timeout: function () {
// ......
}
๊ฐ์ฌํฉ๋๋ค.
๋ฌธ์ ๋ฅผ ์ฐพ์์ต๋๋ค. URL ๋ก๋ฉ ๋๋ฌธ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ
html ํ์ด์ง์ ng-app ํ๊ทธ
์น์ ํ๋,
๋๋ ๋๋ผ
๋๋ ๋๋ผ...!
2016๋ 12์ 15์ผ 06:12์ Amy Boyd [email protected] ์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ด ๋ฌธ์ ๊ฐ ์์๊ณ ๋ฐ๋ณต๋๋ $timeout($timeout
$interval์ ์ฐจ๋จํ์ง ์๋ ๋ฐ๋ฉด ๊ฐ๋๊ธฐ๋ ์ฐจ๋จํฉ๋๋ค.๋ฐ๋ณต๋๋ $timeout์ ์ฐพ์ผ๋ ค๋ฉด ๊ฐ๋๊ธฐ์ ์์ ํ์๊ธฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด:$ ๊ฐ๋๊ธฐ config/protractor.js --elementExplorer
๋๋ฒ๊ฑฐ ์์ด์ ํธ๋ฅผ ์์ํฉ๋๋ค.
ํฌํธ 5858์์ ์์ ๋๊ธฐํ๋ ๋๋ฒ๊ฑฐvar ๋ณธ๋ฌธ = ์์(by.css('๋ณธ์ฒด'))
body.isPresent()
ScriptTimeoutError: 15์ด ํ์ ๋น๋๊ธฐ Angular ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐํ๋ ๋์ ์๊ฐ์ด ์ด๊ณผ๋์์ต๋๋ค. ํ์ฌ ํ์ด์ง๊ฐ Angular ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค. ์์ธํ ๋ด์ฉ์ FAQ๋ฅผ ์ฐธ์กฐํ์ธ์. https://github.com/angular/protractor/blob/master/docs/timeouts.md#waiting -for-angular
๋ก์ผ์ดํฐ๊ฐ ์๋ ์์๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ - ๋ก์ผ์ดํฐ: By(css ์ ํ๊ธฐ, ๋ณธ๋ฌธ).
๋ค์ ์์ ์ด ๋ณด๋ฅ๋์์ต๋๋ค.
- $timeout: ํจ์() {
// ......
}โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/angular/protractor/issues/2963#issuecomment-267302567 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AViSFkiN29oWnH6AJ0P_wNY_LNzE2fglks5rISCYgaJpZM4Hd20v
.
์๋ ๋ชจ๋,
์๊ฐ ์ด๊ณผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฐ๋๊ธฐ์์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์คํ ์ค์ ๋๋ค. ์์ธํ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์กฐ์ธ ๋ถํ๋๋ฆฝ๋๋ค. ๊ฐ์ฌํฉ๋๋ค
์คํจ: ๋น๋๊ธฐ Angular ์์ ์ด 30์ด ํ์ ์๋ฃ๋ ๋๊น์ง ๋๊ธฐํ๋ ๋์ ์๊ฐ์ด ์ด๊ณผ๋์์ต๋๋ค. ํ์ฌ ํ์ด์ง๊ฐ Angular ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋๊ธฐ ๋๋ฌธ์ผ ์ ์์ต๋๋ค.
@sallojusuresh , ์๋ ์๋ฃจ์
์ด ์๋ํ์ต๋๋ค.
jasmineNodeOpts: {
๊ธฐ๋ณธ ์๊ฐ ์ด๊ณผ ๊ฐ๊ฒฉ: 2500000
},
์ง๋ฌธ - ์์ ๊ฐ์ด ๊ธฐ๋ณธ ์๊ฐ์ ์ค์ ํ ์ ์๋ ๊ฒฝ์ฐ 'beforeEach'์์ setTimeout ํจ์๋ฅผ ์ฌ์ฉํ๊ณ 'it'์์ ์ฝ๋ฐฑ์ ์๋ฃํฉ๋๋ค. ์ด๋ค ์์ด๋์ด๋ผ๋?
๋๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ ์ณค๋ค
var originalTimeout;
beforeEach(function() {
originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
});
afterEach(function() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
});
๊ฐ์ฌํฉ๋๋ค.
๋๋ ๋๋ผ...!
2018๋
3์ 11์ผ 23:53, Md. Zahirul Haque [email protected]
์ผ๋ค:
๋๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ณ ์ณค๋ค
` var originalTimeout;
beforeEach(ํจ์() {
originalTimeout = ์ฌ์ค๋ฏผ.DEFAULT_TIMEOUT_INTERVAL;
์ฌ์ค๋ฏผ.DEFAULT_TIMEOUT_INTERVAL = 10000;
});AfterEach(ํจ์() {
jasmine.DEFAULT_TIMEOUT_INTERVAL = ์๋ ์๊ฐ ์ด๊ณผ;
});`โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/angular/protractor/issues/2963#issuecomment-372187210 ,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe-auth/AViSFg7ITAW3XW5zky_-QXXmAudt11qDks5tdfE1gaJpZM4Hd20v
.
@NickTomlin ๋น์ ์ ๋ฐฉ๊ธ ํ๋ฃจ๋ฅผ ๋ณด๋์ต๋๋ค :) ๋๋ directconnect๋ฅผ ์ฌ์ฉํ๊ณ ์ผํ์ต๋๋ค. directconnect๊ฐ ์ค์ ๋ก ํ๋ ์ผ์ ๋ํด ์ฝ๊ฐ์ ๋น์ ๋น์ถ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
ํ์์ ๊ฒฝ์ฐ ์ด ์ค๋ฅ๋ "fixture.detectChanges()"์ ๋ถ์ ์ ํ ์ฌ์ฉ์ผ๋ก ์ธํด ๋ฐ์ํ์ต๋๋ค. ์ด ๋ฉ์๋๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๊ฐ์ง๋ ๋๋ง ์ฝ๋ฐฑ์ ์๋ตํ๋ ์ด๋ฒคํธ ๋ฆฌ์ค๋(๋น๋๊ธฐ)์ธ ๊ฒ ๊ฐ์ต๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ด ๊ฐ์ง๋์ง ์์ผ๋ฉด ์ฝ๋ฐฑ์ ํธ์ถํ์ง ์์ ์๊ฐ ์ด๊ณผ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค :)
@juliemr ์๊ฐ ์ด๊ณผ - jasmine.DEFAULT_TIMEOUT_INTERVAL์์ ์ง์ ํ ์๊ฐ ์ด๊ณผ ๋ด์ ๋น๋๊ธฐ ์ฝ๋ฐฑ์ด ํธ์ถ๋์ง ์์์ต๋๋ค. ๋ด ํ ์คํธ์์ ๋ค์ ๋ฐ์ํ๋ ์ด ์ค๋ฅ๋ ๊ฐ๊ฐ ์ด์ ์, ๊ฐ๊ฐ ์ดํ์, browser.sleep์์ ์ฌ์ค๋ฏผ ์๊ฐ ์ด๊ณผ ๊ฐ๊ฒฉ์ 100000๊น์ง ์ฆ๊ฐ์์ผฐ์ต๋๋ค. ํ์ง๋ง ๋ด ์ฝ๋๊ฐ ์คํ๋์ง ์์ผ๋ฏ๋ก ๋ด๊ฐ ๋ฌด์์ ํ ์ ์๋์ง ์ ์ํด ์ฃผ์ญ์์ค.
์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ์ฌ์ค๋ฏผ ์ ํ ์๊ฐ์ ์ต๋ 300000์ผ๋ก ๋๋ฆฌ๋ ๋์ ํด๊ฒฐํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ pls๋ ์ด์ ๋ํด ์ด๋ป๊ฒ ํด์ผ ํ๋์ง ์ ์ํฉ๋๋ค.
๊ฐ๋จํ ์๋ฅผ ๋ค์ด ์ฃผ์๊ฒ ์ต๋๊น?
์ด์ ๋ํ ํด๊ฒฐ์ฑ
์ ๊ฐ๋๊ฐ ์๋ ์ฑ์ ๋ํ ํ
์คํธ๋ฅผ ์์ฑํ๋ ค๋ ๊ฒฝ์ฐ node_modules/protractor/built์์ runner.js๋ก ์ด๋ํ๋ ๊ฒ์
๋๋ค.
waitForAngularEnabled๋ก ๋ผ์ธ # 210 ํธ์ง: false //true
@juliemr ์ด ์ค์ ์ ๊ตฌ์ฑํ ์ ์๋๋ก ์ ์ํฉ๋๋ค.
onPrepare()
์น์
์์ ํ ์ ์์ต๋๋ค.
onPrepare: async () => {
await browser.waitForAngularEnabled(false);
....
}
๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง๋ง ์ฌ๊ธฐ์ ์ ๊ณต๋ ์๋ฃจ์
์ด ํจ๊ณผ๊ฐ ์์์ต๋๋ค. ์๊ฐ์ด ์์ผ๋ฉด ์คํ ์ค๋ฒํ๋ก์ ๋ํ ๋ด ์ง๋ฌธ์ ์ดํด๋ณด์ญ์์ค. ๋ฌธ์ ๋ ์ฝ๊ฒ ์ฌํํ ์ ์์ผ๋ฉฐ repo๊ฐ โโ์์ต๋๋ค. ๋ฒ๊ทธ์ผ ๊ฐ๋ฅ์ฑ์ด ์๋ค๊ณ ๋ด
๋๋ค.
https://stackoverflow.com/questions/53786401/error-debugging-protractor-with-node-8-async-await-and-angular-6
false๊ฐ true์ ๊ฐ์ ๊ฒ์ผ๋ก ์์๋จ ์ด์ : ์ฝ์์ ์ค๋ฅ ๋ก๊ทธ๊ฐ ์์:Entry {
์์ค: ์์ค { ์ด๋ฆ_: '์ฌ๊ฐ', ๊ฐ_: 1000 },
๋ฉ์ธ์ง:
"์ค๋ฅ" ์ค๋ฅ: formGroup์ FormGroup ์ธ์คํด์ค๋ฅผ ์์ํฉ๋๋ค. ํ๋๋ฅผ ์ ๋ฌํ์ญ์์ค.\n\n ์:\n\n \n
ํ์ ๋ฒํผ์ ํด๋ฆญํ๋ ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
๊ฒ์๋ฌผ์ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ ๊ฐ์ ธ์ค๊ธฐ์ HttpClientModule์ ์ถ๊ฐํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [],
providers: [ CookieService, HttpClient],
imports: [HttpClientModule],
});
});
๊ฒ์๋ฌผ์ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ผ๋ฉฐ ๊ฐ์ ธ์ค๊ธฐ์ HttpClientModule์ ์ถ๊ฐํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค.
beforeEach(() => {
TestBed.configureTestingModule({ declarations: [], providers: [ CookieService, HttpClient], imports: [HttpClientModule], });
});
๊ฐ์ธ์ ์ผ๋ก ํ ์คํธ๋ฒ ๋ ๋ด์์ HttpClientModule์ ๊ฐ์ ธ์ค๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. ๋จ์ ํ ์คํธ์์ API๋ฅผ ์คํํ๋ ค๊ณ ์๋ํ์ง๋ง ๊ฒฐ๊ณผ์ ์ผ๋ก ์คํจํฉ๋๋ค. ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ HttpClientTestingModule์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
@sallojusuresh , ์๋ ์๋ฃจ์ ์ด ์๋ํ์ต๋๋ค.
jasmineNodeOpts: {
๊ธฐ๋ณธ ์๊ฐ ์ด๊ณผ ๊ฐ๊ฒฉ: 2500000
},
์ง๋ฌธ - ์์ ๊ฐ์ด ๊ธฐ๋ณธ ์๊ฐ์ ์ค์ ํ ์ ์๋ ๊ฒฝ์ฐ 'beforeEach'์์ setTimeout ํจ์๋ฅผ ์ฌ์ฉํ๊ณ 'it'์์ ์ฝ๋ฐฑ์ ์๋ฃํฉ๋๋ค. ์ด๋ค ์์ด๋์ด๋ผ๋?
์ด๊ฒ์ ๊ฐ์ฅ ์ข์ ํด๊ฒฐ์ฑ ์ ๋๋ค. ์ด ์ฝ๋๋ฅผ ur ๊ตฌ์ฑ ํ์ผ์ ๋ถ์ฌ๋ฃ์ผ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@sallojusuresh , ์๋ ์๋ฃจ์ ์ด ์๋ํ์ต๋๋ค.
jasmineNodeOpts: {
๊ธฐ๋ณธ ์๊ฐ ์ด๊ณผ ๊ฐ๊ฒฉ: 2500000
},
์ง๋ฌธ - ์์ ๊ฐ์ด ๊ธฐ๋ณธ ์๊ฐ์ ์ค์ ํ ์ ์๋ ๊ฒฝ์ฐ 'beforeEach'์์ setTimeout ํจ์๋ฅผ ์ฌ์ฉํ๊ณ 'it'์์ ์ฝ๋ฐฑ์ ์๋ฃํฉ๋๋ค. ์ด๋ค ์์ด๋์ด๋ผ๋?