ç§ãã¡ã®ã¢ããªã§ã¯ãç¹å®ã®ãã¿ã³ãã¯ãªãã¯ããããšãã«ãŠãŒã¶ãŒã«ããããã¢ãããã¡ãã»ãŒãžã衚瀺ããŸãã ãããã®ãããã¢ããã¡ãã»ãŒãžã¯ãçŽ20ç§éã®ã¿è¡šç€ºãããŸãïŒãã®åŸã$ timeoutã«ãã£ãŠåé€ãããŸãïŒã
åé¡ã¯ãå床åšã$ timeoutãå®äºãããŸã§åŸ ã£ãŠããã.findElementïŒïŒããã³.expectïŒïŒãåŠçããããã«èŠããããšã§ãã ãã ãã$ timeoutã_timedout_ã®å Žåãã¡ãã»ãŒãžã¯æ¶ããèŠçŽ ãèŠã€ãããŸããã
ããããã€ãã¹/解決ããæ¹æ³ã«ã€ããŠäœãææ¡ã¯ãããŸããïŒ ïŒæ£ããããããã¢ãããã¡ãã»ãŒãžããŠãŒã¶ãŒã«è¡šç€ºãããããšãè¡šæããå¿ èŠããããŸãïŒ
ããããšã
ptor.ignoreSynchronization
ã䜿çšã§ããŸãããããã«ããããã¹ãã®ä»ã®å Žæã§ãã¬ãŒã¯ãçºçããå¯èœæ§ããããŸãã ãŸãã¯ãAngular 1.2rc3ã«ã¯ãProtractorãåŸ
æ©ããªãinterval
ãµãŒãã¹ããããŸãïŒhttps://github.com/angular/angular.js/commit/2b5ce84fca7b41fca24707e163ec6af84bc12e83ãåç
§ïŒã 1åç¹°ãè¿ãééãèšå®ã§ããŸãã
ããã«ã¡ã¯@drhumlen ãç§ãã¡ã¯åãåé¡ãæ±ããŠããŸããããããŠç§ãã¡ã¯ãããã¢ãããééããªããŠããããã¹ãã«è¡ãã¹ããã®ã§ãããšçµè«ä»ããŸãã ãã®ãããéç¥ã·ã¹ãã ãã¢ãã¯ããã¢ãã¯ãåŒã³åºãããããšãæåŸ
ããŸãïŒæçµçã«ã¯ããã€ãã®éèŠãªæ
å ±ãå«ãŸããŸãïŒã ãŸããéç¥ããŠããããã¹ãããŠãäœãå£ããŠããªãããšã確èªããŸããã
ã圹ã«ç«ãŠã°å¹žãã§ãã
$interval
ãç§ãã¡ã®ããã«ããªãã¯ãããŸããã
$interval(function() {
// ...
}, duration, 1);
ä»ã§ã¯ããŸãæ©èœããŸãã ããããç§ãã¡ã¯éåžžã«èª å®ã§ãããåãã¹ãã®åŸã«ãããã¢ãããä»ã®æ¹æ³ã§åé€ãããŠããããšã確èªããå¿ èŠããããŸãïŒãã®å Žåããxããã¿ã³ãã¯ãªãã¯ããŸãïŒã
afterEach(function() {
removeLogMessagesFromDOM();
});
@mackwic ïŒå€ãã®ã¢ããªã®åäœãã¹ãã§ãã¹ãã§ãããšæããŸããããã®å Žåããšã©ãŒã¡ãã»ãŒãžã¯ããã¯ãšã³ãã«ãã£ãŠçæããããããe2eã§ãã¹ãããå¿ èŠããããŸãã
ããããšã@juliemr
å床åšã$timeout
åŸ
ã€ã®ã¯å¥åŠã«æããŸãã ã»ãšãã©ã®å ŽåããŠãŒã¶ãŒã¯ããã«å¯ŸåŠããå¿
èŠããããŸããïŒ
ãŸãããã®åé¡ã«çŽé¢ãã $interval
解決ããŸããã å°ãã²ãããšã $timeout
ããã«äœ¿çšã§ããŸãã
ä¿åæ¹æ³ããã¹ãããä¿ååŸã«æåéç¥ã衚瀺ãããããšã確èªãããã£ãã®ã§ãã ãã®éç¥ã¯$ timeoutãµãŒãã¹ã«ãã£ãŠé ãããŠããŸããã å床åšã¯$ timeoutãåŸ ã£ãŠããŠãéç¥ãé衚瀺ã«ãªã£ãåŸã§éç¥ã衚瀺ããããã©ããã確èªããŠããŸããã
åïŒ
$timeout(function() {
//hide notification
}, 3000);
åŸïŒ
var intervalCanceller = $interval(function() {
//hide notification
$interval.cancel(intervalCanceller);
}, 3000);
ããã¯æå¹ãªåé¡ãšã¯èŠãªãããŸãããïŒ ç§ã¯èªåã§ããã«ééããŸããã $interval
代ããã«$timeout
$interval
䜿çšããããšã解決çã§ãããããå€ãã®åé¿çã§ãããšã¯æããŸããã
$interval
ãã$timeout
$interval
ã«å€æŽããŠãããããæ©èœãããããšã¯ã§ããŸããã
ã¿ã€ã ã¢ãŠãåŸã«æ¶ããããŒã¹ãããããŸãã ããã¯ç§ãããããã¹ãããããã«äœ¿çšããŠããã³ãŒãã§ãïŒ
username = element(select.model("user.username"))
password = element(select.model("user.password"))
loginButton = $('button[type=\'submit\']')
toast = $('.toaster')
# Check the toaster isn't displayed initially
expect(toast.isDisplayed()).toBe(false) # This passes
username.sendKeys("redders")
password.sendKeys("wrongpassword")
loginButton.click()
toastMessage = $('toast-message')
# Check the toaster is now displayed
expect(toast.isDisplayed()).toBe(true) # This passes
expect(toastMessage.getText()).toBe("Invalid password") # This fails
é¢é£ããããŒã¯ã¢ããã¯ãã¡ãïŒç¿¡ç¿ ïŒ
.toaster(ng-show="messages.length")
.toast-message(ng-repeat="message in messages") {{message.body}}
倱æã¯ã toastMessage = $('toast-message')
ãã©ã®èŠçŽ ãšãäžèŽããªãããšã§ãã .toast-message
ãååšããªããšãã«æåã«åŒã³åºãããŠãããããããã¯å€±æããŸããïŒ
ãã®åé¡ã¯ãŸã ä¿®æ£ãããŠããŸããïŒ ã¿ã€ã ã¢ãŠãã®ä»£ããã«ééã䜿çšããããšã¯ã解決çããããããã³ã°ãŸãã¯äœæ¥ã§ããããã§ãã
ç§ã¯åãåé¡ã«çŽé¢ããbrowser.ignoreSynchronization = true; å©ãã«ãªããªãã ã³ãŒãã$ intervalã«çœ®ãæããããšã¯ã§ããŸãããe2eãã¹ãã§ã¯ãæ¡çšãããã³ãŒãã§ã¯ãªããå®éã®ã³ãŒãããã¹ãããå¿ èŠããããŸãã
@ vytautas-pranskunas- ignoreSynchronization
ãæ©èœããŠããªãå Žåã¯ãå¥ã®åé¡ãããããã§ãã åçŸå¯èœãªäŸãæäŸã§ããå Žåã¯ãæ°ããåé¡ãéããŠãã ããã
ignoreSynchronization
ãªãããšãããããŸããã
ãšã©ãŒã¡ãã»ãŒãžã®è¡šç€ºãæ
åœãããµãŒãã¹ããããŸãã ã·ã§ãŒã¡ãã»ãŒãžãæ¶ããåŸã5ç§éç»é¢ã«è¡šç€ºããããŸãŸã«ãªããŸãã ãã®ããã»ã¹ã¯$ timeoutã«ãã£ãŠå¶åŸ¡ãããŸãã
2ã€ã®ã·ããªãªããããŸã-æåã®ignoreSynchronization
ã¯æ£åžžã«æ©èœãã2çªç®ã®ã·ããªãªã¯æ©èœããŸãã
1ïŒãŠãŒã¶ãŒããã¿ã³ãã¯ãªãã¯ãããšããã«ã¡ãã»ãŒãžã衚瀺ãããããšãç¥ã£ãŠããŸãã expec(message).tobe(...)
ããŸãããã®å Žåã ignoreSynchronization
ãåŠçãå®è¡ããŸãã
2ïŒã¡ãã»ãŒãžã¯ïŒãµãŒããŒã®å¿çæéã«å¿ããŠïŒä»»æã®æéãçµéãããšè¡šç€ºãããå¯èœæ§ããããè¿œå ã®ããžãã¯ã¯è¡šç€ºãããåŸã«ã®ã¿å®è¡ããå¿
èŠãããããšãç¥ã£ãŠããŸãããã®å Žåãããã§browser.wait(by.(....).isPresent(), n)
ã䜿çšããå¿
èŠããããŸãignoreSynchronization
ãæ©èœãåæ¢ãããããŒãç¶ããŸãïŒåŸ
æ©äžã«browser.wait console.logåºåã衚瀺ããŸãïŒ
waits
waits
waits (element appears)
browser waits freezes for 5 seconds
after element disappears it continue
wait
wait
wait
ã芧ã®ãšããã$ timeoutã«ã¢ã¯ã»ã¹ãããšåŸ æ©ãããªãŒãºãããããèŠçŽ ãååšããããšã¯ãããŸããã
ãã©ã³ã«ãŒã§åçŸã§ããããã«ããæéã¯ããŸããããŸãããããã®ã·ããªãªã¯éåžžã«äžè¬çã§ããã¯ããªã®ã§ãè©ŠããŠã¿ããšçŽ æŽãããã§ãããã
Thnaks
ãã°ãäœæããã³ãŒãã®ã³ã³ããã¹ãããªããšããã°ã¯ããŸã圹ã«ç«ã¡ãŸããã ãããå ±æããŠããããŸããïŒ
ãã©ã€ãã·ãŒã®ããã«ã³ãŒããå
±æã§ããŸããããã¢ã€ãã¢ãåŸãããã«ããã€ãã®æ¬äŒŒã³ãŒãã衚瀺ã§ããŸã
ïŒã¡ãã»ãŒãžã衚瀺ããããã®ãã¿ã³ãšng-repeatããããããhtmlã³ãŒããèšè¿°ããŠããŸããïŒ
constructor(){
$scope.$on('globalMessageAdded', () => {
$scope.globalMessages = this.getMessages();
});
}
callServer(){
//interval here acts like server delay
$interval(()=> {
$rootScope.messages.push('test messages');
this.$rootScope.$broadcast('globalMessageAdded');
}, 3000, 1);
}
getMessages = () => {
var newMessages = <ISpaGlobalMessage[]>[];
_.forEach(this.$rootScope.globalMessages, item => {
newMessages.push(item);
//because of this timeout browser.wait stops waitng for 5 seconds
this.$timeout(() => {
this.remove(item);
this.$rootScope.$broadcast('globalMessageRemoved');
}, 5000);
});
return newMessages;
}
å床åšéšå
element('button').click();
browser.ignoreSynchronization = true; //tried with and without it
browser.wait(() => element(by.css('.alert-success')).isPresent(), 10000000);
browser.ignoreSynchronization = false;
other code that should be executed after successful message
èŠçŽ ãååšããŠããéãbrowse.waitã¯ãã§ãã¯ãããªã¬ãŒããªããããbrowser.waitã¯ãã®èŠçŽ ãæ€åºããŸããã
ããã«ã€ããŠäœãé²å±ãèãã¯ãããŸããïŒ
browser.waitïŒïŒã®çŽåŸã«ãbrowser.ignoreSynchronization = false;ããèšå®ã§ããªãã®ã¯ãªãã§ããïŒ
ç§ã®ã³ãŒã
var el = element(by.css('.popup-title.ng-binding'));
browser.ignoreSynchronization = true;
browser.wait(function (){
return el.isPresent();
}, 10000);
var popupMsg = el.getText();
expect(popupMsg).toEqual('something...');
browser.ignoreSynchronization = false; // not work, if take out this statement, it works again
åãåé¡ã«åãŸããŠããã 䜿çšããããŒã¹ãã¢ãžã¥ãŒã«ã¯npmã®æ±çšã³ã³ããŒãã³ãã§ããããã$ intervalã䜿çšããããã«ç°¡åã«å€æŽããããšã¯ã§ããŸããã ãŸããå床åšãäžæ¹ãåŸ ã¡ãããäžæ¹ãåŸ ããªãçç±ãããããŸããã çæ³çã«ã¯ãããã¯ããèªäœã§æ§æå¯èœã§ãããããä»ã®åæåŸ æ©ã«ã¯åœ±é¿ããŸããã
ãã®åé¡ã¯angular-ui / bootstrapïŒ3982ã«ããã$ intervalã«ã¹ã¯ããããªãããšã«ããã®ã§ãããã«æ¥ãŠãåé¡ãä¿®æ£ããããã«ã§ããããšããããã©ããã確èªããŸãã
ã©ããããããšãããããŸããã
ä»é±ãããŒã¹ãéç¥ã³ã³ããŒãã³ãã䜿çšããŠãã®åé¡ãå®è¡ããŸããã
䜿çšããŠ$interval
代ããã«$timeout
ãã£ãšãããããœãªã¥ãŒã·ã§ã³ã§ã¯ãããŸããã ãããŠã browser.ignoreSynchronization = true
ã¯ç§ã«ãšã£ãŠãæ©èœããŸããã
äœãèããã¢ã€ãã¢ã¯ãããŸããïŒ
ãŸããŸãå€ãã®äººã ãããã«ééããã®ã§ãAngularããŒã ã¯ãã®åé¡ãåéããããšãèšç»ããŠããŸããïŒ ãã¹ãã«åãããã«ã³ãŒããæžãã¹ãã§ã¯ãªãã®ã§ã$ timeoutã$ intervalã«çœ®ãæããããšãã§ããã®ã§ãåé¡ããªããµããããã®ã¯å°é家ã§ã¯ãããŸããããã¹ãã¯ãã¹ãã³ãŒãã«æžãå¿ èŠããããŸãã
+1ä¿®æ£ãå¿ èŠã§ãã
åæããŸããã ãã¹ããä¿®æ£ããå¿ èŠããããŸãã +1
+1ãããããã®åé¡ã«ééããŸããã å€åãå床åšã®ã¿ã€ã ã¢ãŠããåŸ ã€ã¹ãã§ã¯ãªãããšãäŒããæ¹æ³ãããã¯ãã§ãã
ignoreSynchronisationã¯ç§ã«ã¯æ©èœããŸãããç§ã¯ãããããŸãã«ãå€ãã®ãã®ãç¡èŠãããšæããŸãã ã¿ã€ã ã¢ãŠãã®åæãç¡èŠããæ¹æ³ããŸãã¯browser.waitForTimeouts();
ãããªããæŽç·ŽãããAPIãå¿
èŠã§ãã
+1ã ä¿®æ£ãå¿ èŠã§ãã ãªãééã空ããŠéãåé¿çã䜿çšããå¿ èŠãããã®ã§ããã
+1
+1ãäžå®å®ãªãã¹ããåŠçããã®ãéåžžã«é£ããããšãçºèŠ..ãããä¿®æ£ããå¿ èŠããããŸã
+1ã¯@ vytautas-pranskunasã«åæããŸã-ãã¹ãèªäœãæ©èœãããããã ãã«ããã¹ãããã³ãŒããå€æŽããå¿ èŠã¯ãããŸããã
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
å€ãã®äººãbrowser.ignoreSynchronization = true
ãééã£ãæ¹æ³ã§äœ¿çšããŠããã®ã§ã¯ãªãããšæããŸãã ç§ãééã£ãŠããå Žåã¯ç§ãèšæ£ããŠãã ããããããããªããæžããªãç§ã«ïŒ
browser.ignoreSynchronization = true;
expect( elem.getText() ).toEqual( "foo" );
browser.ignoreSynchronization = false;
ãã®åŸã¯æ©èœããŸãããããã¯çŽç²ãªJavaScriptã§ããã3è¡ãåæçã«èªã¿åãããŸãã ãããã£ãŠã getText
ãšexpect
çŽæã解決ãããŸã§ã«ãåæã¯ãã§ã«ãªã³ã«ãªã£ãŠããŸãã å床åšãæåŸã®çŽæã解決ãã then
ã³ãŒã«ããã¯ã§åæãå
ã«æ»ãã®ãåŸ
ã€ããšã§ããããåé¿ã§ããŸãã
å床åšããŒã ã人ã ãæ¯æŽãã1ã€ã®æ¹æ³ã¯ãpromiseãããã¡ãŒãå®è¡ããããšãã«ã®ã¿åæã«åœ±é¿ãäžããã¡ãœãããžã®ã¢ã¯ã»ã¹ãæäŸããããšã§ãã äŸãã°ïŒ
browser.setIgnoreSynchronization( true );
expect( elem.getText() ).toEqual( "foo" );
browser.setIgnoreSynchronization( false );
ãšã«ãããå床åšã$ timeoutãåŸ
ã£ãŠããããã«ãå€ãã®åé¡ãçºçããŸããã倧èŠæš¡ãªã¢ããªã±ãŒã·ã§ã³ã§ã¯ãããŒã«ããããã¢ãŒãã«ãã¢ãã¡ãŒã·ã§ã³ãªã©ãå¯äœçšãå€ãããŸãã browser.ignoreSynchronization = true;
ãšã®åæãã°ããŒãã«ã«ç¡å¹ã«ããããšã«ããŸããã
$ intervalã䜿çšãã+1ã¯ããã¯ã§ããã解決çã§ã¯ãããŸãã
+1ãã®ãã°ã¯ç§ã«å€ãã®æšãããåŒãèµ·ãããŸããã ãããä¿®æ£ããæ¹æ³ã«ã€ããŠã®ãã€ã¢ãã°ãå§ããŸãããã æ°çŸïŒïŒïŒã®å Žæã§$ timeoutã䜿çšããæ°åã®bowerããã³npmè§åºŠã¢ãžã¥ãŒã«ããããã³ãŒãã§45å䜿çšããŠããŸãã ç§ã®ã³ãŒããå€æŽããããšã¯å®è¡å¯èœïŒãããŠåççïŒã§ããããµãŒãããŒãã£ã®ã³ãŒããå€æŽããããšã¯ããžã¹ãã£ãã¯çã«å®å šã«åé¡å€ã§ãïŒã¢ããã¹ããªãŒã ãããã€ããŒã«é£çµ¡ããŠåæ©ä»ãããããšãããããµãŒãããŒãã£ã®Angularã¢ãžã¥ãŒã«ãããŒã«ã«ã§ãã©ãŒã¯ããŠäžŠåãããã¹ããªãŒã ãç¶æãããããããšã¯æªå€¢ã®ã·ããªãªã§ããã°ãProtractorãš$ timeoutã«ãããã¢ãžã¥ãŒã«ã®å€éšã«ãªãå Žåã¯ãåãå ¥ããããŸããã
ããã«äžç·ã«åãçµã¿ãŸãããã
+1
ãã®ãã°ã¯ã以äžã®ãµã³ãã«ã·ããªãªã§e2eãã¹ããè¡ãéã«åé¡ãåŒãèµ·ãããŠããŸãã
1ïŒãã£ãŒã«ãã«å
¥åãããã©ãŒã ãéä¿¡ããŸãããã©ãŒã ã¯ã次ã®ãããªè€æ°ã®ã€ãã³ãããããŒããã£ã¹ãããŸãã
*ã¹ããŒã¿ã¹ã¡ãã»ãŒãžãªã³ã¯ã$ timeoutãæ·»ä»ãããæ°ç§éãã衚瀺ãããŸããã
*æ°ããã¡ãã»ãŒãžãå¥ã®ãŠã£ãžã§ããã®ã¡ãã»ãŒãžãªã¹ãã«è¿œå ãããŸã
2ïŒæ¬¡ã«ãã¹ããŒã¿ã¹ã¡ãã»ãŒãžã®ãªã³ã¯ãã¯ãªãã¯ãããšãã¡ãã»ãŒãžããããã¢ãããšããŠéãã詳现ã衚瀺ãããŸãã
ãããã£ãŠãã·ããªãªãèªååããããšããŠãããšãã«ããã©ãŒã ãéä¿¡ã§ããŸãã ãã ããã¹ããŒã¿ã¹ã¡ãã»ãŒãžã®ãªã³ã¯ãã¯ãªãã¯ããããšãããšãbrowser.ignoreSynchronization = true;ãå¿ èŠã«ãªããŸãã ãªã³ã¯ã$ timeoutã«æ¥ç¶ãããŠããããã§ãã
ãªã³ã¯ã¯ã¯ãªãã¯å¯èœã§ããããããã¢ãããšããŠéãã¡ãã»ãŒãžãæ©èœããŠããŸããã
Stackoverflowãšããã€ãã®ã°ãŒã°ã«ã¢ã³ãµãŒããã§ãã¯ã€ã³ãããšããããã¯$ timeoutã®ããã§ããããšãããããŸããã ã ããç§ã¯èŠçŽ ã®$ timeoutãåé€ããŠãã§ãã¯ããŸãããä»ããã¯æ£ããåäœããŸãã
ãããã£ãŠãç§ã®èŠæ±ã¯ã$ timeoutãªãã§èŠçŽ ãæã€ããšãã§ããªããšãã¯ãã€ã§ãã§ãã ãããã£ãŠãäžèšã®ã·ããªãªãæ€èšããå床åšã$ timeoutã®åŸ æ©ãç¡èŠã§ããæ°æ©èœãçšæããŠãã ããã
åãåé¡ã«çŽé¢ãããããåé¿ããããã«window.setTimeoutãšwindow.clearTimeoutã䜿çšããå¿ èŠããããŸããã ããŸãè§åºŠã®ãªãæ¹æ³ã§ããããã€ãžã§ã¹ãã«å¹²æžããå¯èœæ§ããããŸããã$ intervalãšåæã®ç¡èŠã¯è§£æ±ºçã§ã¯ãããŸãã
ãŸã£ããåãåé¡ã«çŽé¢ããŸããããå床åšããŒã ã®èª°ããããã«å¯Ÿå¿ããŸããïŒ
+1
以äžã®ãããªæ±ã解決çã«ãã©ãçããŸã§ãããã¯ç§ã倢äžã«ãããŠããŸããïŒããã§ã¯å床åšnoobïŒã
beforeEach(function () {
browser.ignoreSynchronization = true;
});
afterEach(function () {
browser.restart();
});
æ£åžžã«åäœãããããã¬ã¹ãã©ãŠã¶ã§ã¯é ãããŸããã
+1
ããã§ãåé¡ãçºçããŠããŸãã ç§ã®ãã¹ãã¯ãããã€ãã®APIãªã¯ãšã¹ããè¡ããããã€ãã®WebSocketãéãããŒãžã«ã¢ã¯ã»ã¹ãããŸã§é 調ã«é²ãã§ããŸããã ãã®æç¹ã§ãå床åšã¯æ¯åã¿ã€ã ã¢ãŠãããŸãã ç§ã¯è¯ã解決çãèŠã€ããŠããŸããã
browser.ignoreSynchronization = true;
ã°ããŒãã«ã«ãªãã«ããå Žåã«ãææ¡ããããã«ããŒã¡ãœããã«ã€ããŠ@floribonã«èå³ã
describe('something', function() {
it('should do....', function() {
var fooPage = new FooPage();
fooPage.visit();
var barPage = fooPage.clickCreate(); // does some API call, then redirects to barPage
// at this point, enough things are happening that it is impossible to interact with barPage.
// Protractor locks up.
// barPage makes other API call & opens WebSocket
barPage.clickBaz(); // nope. will timeout every time.
});
});
@benjaminapetersenç§ã®ãã«ããŒã¯æ¬¡ã®ããã«ãªããŸãïŒ
btn1.click(); // Triggers many things and eventually displays page2
wait.forURL('page2'); // wait for page2 to be loaded before moving on
$('.btn1').click(); // this does some async job and eventually displays btn2
wait.forElement('.btn2');
$('.btn2').click();
ããšãã°ã wait.forElement
è¿ãããŸã
browser.wait(() => elem.isPresent().then(p => p, () => {}), timeout, 'Not found');
// browser.wait(function() { return elem.isPresent().then(function(p) { return p;} , function() {}); }, timeout, 'Not found');
ã¢ã€ãã¢ã¯ãå®éã®ãŠãŒã¶ãŒã®è¡åãæš¡å£ããããšã§ããèŠçŽ ãã¯ãªãã¯ããå¥ã®èŠçŽ ã衚瀺ããããŸã§åŸ ã£ãŠããã¯ãªãã¯ãããªã©ã§ããããããããšã§ã$ timeoutãåŸ ã€å¿ èŠããªããªããããé«éã§å®å šã«ãªããŸãã
ããã§éèŠãªã®ã¯ãå éšã®çŽæããã®ãšã©ãŒãç¡èŠããã¿ã€ã ã¢ãŠãã«éãããŸã§ããã«æ°åè©Šè¡ããããšã§ãã
PSïŒãã®ããã«ExpectedConditionsã䜿çšããããšãã§ããŸãããangularãDOMããŒããåæ§ç¯ãããšãã«ããã€ãåé¡ããããŸããïŒããšãã°ã ng-if
æ¡ä»¶ïŒïŒ
browser.wait(browser.ExpectedConditions.precenseOf(elem), timeout, 'Not found');
@floribonçŽ æŽããããããããšãïŒ
@juliemrã¯ãå床åšã§ããŒã¹ããšã©ãŒã¡ãã»ãŒãžããã£ããããã®ãæäŒã£ãŠãããŸããã¡ãŒã«IDanjaliã«è¿ä¿¡ããŠãã ããã [email protected]
@juliemr $ intervalãµãŒãã¹ã䜿çšããŠé·æéå®è¡ãããhttpãªã¯ãšã¹ããåŒã³åºãããšãæ©èœããŠããŸããã å床åšã¯ãŸã ã¿ã€ã ã¢ãŠãã«ãªã£ãŠããŸãã
ãããç§ã®AngularCodeã§ã
thisã$ intervalïŒïŒïŒ=> thisã$ http.get
å床åšã¯ãŸã $ httpã¿ã¹ã¯ãå®äºããã®ãåŸ
ã£ãŠããŸãã
å床åš5.xãšangualrjs1.6xã䜿çšããŠããŸãã
ç§ãã¡ãæäŒã£ãŠãããŸããïŒ
+1ããããåŠçããããã«äœããè¿œå ããå¿ èŠããããŸãã
+1
+1
+1
+1
+1
+1
ãã®ä»æ§ã¯ç§ã®ããã«åããã æ¬åœã«ããããšãïŒ ãããŠãå®è¡ãéåæã§ãããšãããã³ããæ±ããŠ@floribonã«æ声ã
// screenshot-spec.js
// a close button that appears on the md-toast template
const closeToastButton = $('[data-automation="toast-close"]')
const cond = protractor.ExpectedConditions
function waitToastShow() {
return browser.wait(cond.elementToBeClickable(closeToastButton), 5000)
}
function waitToastHide() {
return browser.wait(cond.invisibilityOf(closeToastButton), 5000)
}
screenshot = name => browser.takeScreenshot().then(/* save fn */)
describe('a suite ... ', () => {
it('takes screenshots of an md-toast once shown and after hidden', function () {
// ... actions that launch an md-toast using $mdToast.show({ ... })
browser.ignoreSynchronization = true
waitToastShow().then(() => {
screenshot('toast-showing.png')
waitToastHide().then(() => {
screenshot('toast-hidden.png')
browser.ignoreSynchronization = false;
})
})
});
}
ç¹å®ã®ãã¹ãã±ãŒã¹ã«ã¿ã€ã ã¢ãŠããè¿œå ããæ¹æ³
`
itïŒ '1-é»åã¡ãŒã«ã«éä¿¡ãããç»é²ã³ãŒãã§ãã°ã€ã³ããå¿
èŠããããŸã'ãfunctionïŒdoneïŒ{
// setTimeout(function () {
flow.execute(browser.params.getLastEmail)
.then(function (email) {
expect(email.subject)
.toEqual('[email protected] submitted feedback');
expect(email.headers.to)
.toEqual('[email protected]');
expect(email.html.includes('User feedback details: accountId: 12345, related To: dashboard, description: ' + D.feedbackMsg + ''))
.toEqual(true);
console.log(email.html);
// done();
});
});`
æãåèã«ãªãã³ã¡ã³ã
ãŸããŸãå€ãã®äººã ãããã«ééããã®ã§ãAngularããŒã ã¯ãã®åé¡ãåéããããšãèšç»ããŠããŸããïŒ ãã¹ãã«åãããã«ã³ãŒããæžãã¹ãã§ã¯ãªãã®ã§ã$ timeoutã$ intervalã«çœ®ãæããããšãã§ããã®ã§ãåé¡ããªããµããããã®ã¯å°é家ã§ã¯ãããŸããããã¹ãã¯ãã¹ãã³ãŒãã«æžãå¿ èŠããããŸãã