Best JavaScript code snippet using testcafe
index.js
Source:index.js
...3201 var manipulationExecutor = new ManipulationExecutor(command, globalSelectorTimeout, statusBar);3202 return manipulationExecutor.execute();3203 }3204 var createNativeXHR = hammerhead__default.createNativeXHR, utils = hammerhead__default.utils;3205 function executeNavigateTo(command) {3206 var navigationUrl = utils.url.getNavigationUrl(command.url, window);3207 var ensurePagePromise = hammerhead__default.Promise.resolve();3208 if (navigationUrl && testCafeCore.browser.isRetryingTestPagesEnabled())3209 ensurePagePromise = testCafeCore.browser.fetchPageToCache(navigationUrl, createNativeXHR);3210 return ensurePagePromise3211 .then(function () {3212 var requestBarrier = new testCafeCore.RequestBarrier();3213 hammerhead__default.navigateTo(command.url, command.forceReload);3214 return hammerhead__default.Promise.all([requestBarrier.wait(), testCafeCore.pageUnloadBarrier.wait()]);3215 })3216 .then(function () { return new DriverStatus({ isCommandResult: true }); })3217 .catch(function (err) { return new DriverStatus({ isCommandResult: true, executionError: err }); });3218 }3219 function getResult(command, globalTimeout, startTime, createNotFoundError, createIsInvisibleError, statusBar) {3220 var selectorExecutor = new SelectorExecutor(command, globalTimeout, startTime, createNotFoundError, createIsInvisibleError);3221 statusBar.showWaitingElementStatus(selectorExecutor.timeout);3222 return selectorExecutor.getResult()3223 .then(function (el) {3224 return statusBar.hideWaitingElementStatus(!!el)3225 .then(function () { return el; });3226 })3227 .catch(function (err) {3228 return statusBar.hideWaitingElementStatus(false)3229 .then(function () {3230 throw err;3231 });3232 });3233 }3234 function getResultDriverStatus(command, globalTimeout, startTime, createNotFoundError, createIsInvisibleError, statusBar) {3235 var selectorExecutor = new SelectorExecutor(command, globalTimeout, startTime, createNotFoundError, createIsInvisibleError);3236 statusBar.showWaitingElementStatus(selectorExecutor.timeout);3237 return selectorExecutor.getResultDriverStatus()3238 .then(function (status) {3239 return statusBar.hideWaitingElementStatus(!!status.result)3240 .then(function () { return status; });3241 });3242 }3243 var Promise$1 = hammerhead__default.Promise;3244 function executeChildWindowDriverLinkSelector(selector, childWindowLinks) {3245 if (typeof selector === 'string') {3246 var foundChildWindowDriverLink = testCafeCore.arrayUtils.find(childWindowLinks, function (link) { return link.windowId === selector; });3247 if (!foundChildWindowDriverLink) {3248 var error = new ChildWindowNotFoundError();3249 return Promise$1.reject(error);3250 }3251 // NOTE: We cannot pass the driver window of the found child window driver link3252 // because the current Promise implementation checks the type of the value passed to the 'resolve' function.3253 // It causes an unhandled JavaScript error on accessing to cross-domain iframe.3254 return Promise$1.resolve(foundChildWindowDriverLink);3255 }3256 // TODO: Query url and title properties of the all driverLinks' windows3257 return Promise$1.resolve(null);3258 }3259 var ChildWindowDriverLink = /** @class */ (function () {3260 function ChildWindowDriverLink(driverWindow, windowId) {3261 this.driverWindow = driverWindow;3262 this.windowId = windowId;3263 }3264 ChildWindowDriverLink.prototype.setAsMaster = function () {3265 var msg = new SetAsMasterMessage();3266 return sendMessageToDriver(msg, this.driverWindow, WAIT_FOR_WINDOW_DRIVER_RESPONSE_TIMEOUT, CannotSwitchToWindowError);3267 };3268 ChildWindowDriverLink.prototype.closeAllChildWindows = function () {3269 var msg = new CloseAllChildWindowsMessage();3270 return sendMessageToDriver(msg, this.driverWindow, WAIT_FOR_WINDOW_DRIVER_RESPONSE_TIMEOUT, CloseChildWindowError);3271 };3272 return ChildWindowDriverLink;3273 }());3274 var ParentWindowDriverLink = /** @class */ (function () {3275 function ParentWindowDriverLink(currentDriverWindow) {3276 this.currentDriverWindow = currentDriverWindow;3277 }3278 ParentWindowDriverLink.prototype._getTopOpenedWindow = function (wnd) {3279 var topOpened = wnd;3280 while (topOpened.opener)3281 topOpened = topOpened.opener;3282 return topOpened;3283 };3284 ParentWindowDriverLink.prototype._setAsMaster = function (wnd) {3285 var msg = new SetAsMasterMessage();3286 return sendMessageToDriver(msg, wnd, WAIT_FOR_WINDOW_DRIVER_RESPONSE_TIMEOUT, CannotSwitchToWindowError);3287 };3288 ParentWindowDriverLink.prototype.setTopOpenedWindowAsMaster = function () {3289 var wnd = this._getTopOpenedWindow(this.currentDriverWindow);3290 return this._setAsMaster(wnd);3291 };3292 ParentWindowDriverLink.prototype.setParentWindowAsMaster = function () {3293 var wnd = this.currentDriverWindow.opener;3294 return this._setAsMaster(wnd);3295 };3296 return ParentWindowDriverLink;3297 }());3298 var DriverRole = {3299 master: 'master',3300 replica: 'replica'3301 };3302 var transport = hammerhead__default.transport;3303 var Promise$2 = hammerhead__default.Promise;3304 var messageSandbox$2 = hammerhead__default.eventSandbox.message;3305 var storages = hammerhead__default.storages;3306 var nativeMethods$4 = hammerhead__default.nativeMethods;3307 var DateCtor = nativeMethods$4.date;3308 var TEST_DONE_SENT_FLAG = 'testcafe|driver|test-done-sent-flag';3309 var PENDING_STATUS = 'testcafe|driver|pending-status';3310 var EXECUTING_CLIENT_FUNCTION_DESCRIPTOR = 'testcafe|driver|executing-client-function-descriptor';3311 var SELECTOR_EXECUTION_START_TIME = 'testcafe|driver|selector-execution-start-time';3312 var PENDING_PAGE_ERROR = 'testcafe|driver|pending-page-error';3313 var ACTIVE_IFRAME_SELECTOR = 'testcafe|driver|active-iframe-selector';3314 var TEST_SPEED = 'testcafe|driver|test-speed';3315 var ASSERTION_RETRIES_TIMEOUT = 'testcafe|driver|assertion-retries-timeout';3316 var ASSERTION_RETRIES_START_TIME = 'testcafe|driver|assertion-retries-start-time';3317 var CONSOLE_MESSAGES = 'testcafe|driver|console-messages';3318 var ACTION_IFRAME_ERROR_CTORS = {3319 NotLoadedError: ActionIframeIsNotLoadedError,3320 NotFoundError: ActionElementNotFoundError,3321 IsInvisibleError: ActionElementIsInvisibleError3322 };3323 var CURRENT_IFRAME_ERROR_CTORS = {3324 NotLoadedError: CurrentIframeIsNotLoadedError,3325 NotFoundError: CurrentIframeNotFoundError,3326 IsInvisibleError: CurrentIframeIsInvisibleError3327 };3328 var COMMAND_EXECUTION_MAX_TIMEOUT = Math.pow(2, 31) - 1;3329 var EMPTY_COMMAND_EVENT_WAIT_TIMEOUT = 30 * 1000;3330 var STATUS_WITH_COMMAND_RESULT_EVENT = 'status-with-command-result-event';3331 var EMPTY_COMMAND_EVENT = 'empty-command-event';3332 var Driver = /** @class */ (function (_super) {3333 __extends(Driver, _super);3334 function Driver(testRunId, communicationUrls, runInfo, options) {3335 var _this = _super.call(this) || this;3336 _this.COMMAND_EXECUTING_FLAG = 'testcafe|driver|command-executing-flag';3337 _this.EXECUTING_IN_IFRAME_FLAG = 'testcafe|driver|executing-in-iframe-flag';3338 _this.PENDING_WINDOW_SWITCHING_FLAG = 'testcafe|driver|pending-window-switching-flag';3339 _this.testRunId = testRunId;3340 _this.heartbeatUrl = communicationUrls.heartbeat;3341 _this.browserStatusUrl = communicationUrls.status;3342 _this.browserStatusDoneUrl = communicationUrls.statusDone;3343 _this.browserActiveWindowId = communicationUrls.activeWindowId;3344 _this.userAgent = runInfo.userAgent;3345 _this.fixtureName = runInfo.fixtureName;3346 _this.testName = runInfo.testName;3347 _this.selectorTimeout = options.selectorTimeout;3348 _this.pageLoadTimeout = options.pageLoadTimeout;3349 _this.childWindowReadyTimeout = options.childWindowReadyTimeout;3350 _this.initialSpeed = options.speed;3351 _this.skipJsErrors = options.skipJsErrors;3352 _this.dialogHandler = options.dialogHandler;3353 _this.customCommandHandlers = {};3354 _this.contextStorage = null;3355 _this.nativeDialogsTracker = null;3356 _this.childIframeDriverLinks = [];3357 _this.activeChildIframeDriverLink = null;3358 _this.childWindowDriverLinks = [];3359 _this.parentWindowDriverLink = null;3360 _this.statusBar = null;3361 _this.windowId = _this._getCurrentWindowId();3362 _this.role = DriverRole.replica;3363 _this.setAsMasterInProgress = false;3364 _this.checkClosedChildWindowIntervalId = null;3365 if (options.retryTestPages)3366 testCafeCore.browser.enableRetryingTestPages();3367 _this.pageInitialRequestBarrier = new testCafeCore.RequestBarrier();3368 _this.readyPromise = testCafeCore.eventUtils3369 .documentReady(_this.pageLoadTimeout)3370 .then(function () { return _this.pageInitialRequestBarrier.wait(true); });3371 _this._initChildDriverListening();3372 testCafeCore.pageUnloadBarrier.init();3373 testCafeCore.preventRealEvents();3374 hammerhead__default.on(hammerhead__default.EVENTS.uncaughtJsError, function (err) { return _this._onJsError(err); });3375 hammerhead__default.on(hammerhead__default.EVENTS.unhandledRejection, function (err) { return _this._onJsError(err); });3376 hammerhead__default.on(hammerhead__default.EVENTS.consoleMethCalled, function (e) { return _this._onConsoleMessage(e); });3377 hammerhead__default.on(hammerhead__default.EVENTS.beforeFormSubmit, function (e) { return _this._onFormSubmit(e); });3378 hammerhead__default.on(hammerhead__default.EVENTS.windowOpened, function (e) { return _this._onChildWindowOpened(e); });3379 _this.setCustomCommandHandlers(COMMAND_TYPE.unlockPage, function () { return _this._unlockPageAfterTestIsDone(); });3380 return _this;3381 }3382 Object.defineProperty(Driver.prototype, "speed", {3383 get: function () {3384 return this.contextStorage.getItem(TEST_SPEED);3385 },3386 set: function (val) {3387 this.contextStorage.setItem(TEST_SPEED, val);3388 },3389 enumerable: true,3390 configurable: true3391 });3392 Object.defineProperty(Driver.prototype, "consoleMessages", {3393 get: function () {3394 return new BrowserConsoleMessages(this.contextStorage.getItem(CONSOLE_MESSAGES));3395 },3396 set: function (messages) {3397 return this.contextStorage.setItem(CONSOLE_MESSAGES, messages ? messages.getCopy() : null);3398 },3399 enumerable: true,3400 configurable: true3401 });3402 Driver.prototype._hasPendingActionFlags = function (contextStorage) {3403 return contextStorage.getItem(this.COMMAND_EXECUTING_FLAG) ||3404 contextStorage.getItem(this.EXECUTING_IN_IFRAME_FLAG);3405 };3406 Driver.prototype._getCurrentWindowId = function () {3407 var currentUrl = window.location.toString();3408 var parsedProxyUrl = hammerhead__default.utils.url.parseProxyUrl(currentUrl);3409 return parsedProxyUrl && parsedProxyUrl.windowId || null;3410 };3411 // Error handling3412 Driver.prototype._onJsError = function (err) {3413 // NOTE: we should not send any message to the server if we've3414 // sent the 'test-done' message but haven't got the response.3415 if (this.skipJsErrors || this.contextStorage.getItem(TEST_DONE_SENT_FLAG))3416 return Promise$2.resolve();3417 var error = new UncaughtErrorOnPage(err.stack, err.pageUrl);3418 if (!this.contextStorage.getItem(PENDING_PAGE_ERROR))3419 this.contextStorage.setItem(PENDING_PAGE_ERROR, error);3420 return null;3421 };3422 Driver.prototype._unlockPageAfterTestIsDone = function () {3423 testCafeCore.disableRealEventsPreventing();3424 return Promise$2.resolve();3425 };3426 Driver.prototype._failIfClientCodeExecutionIsInterrupted = function () {3427 // NOTE: ClientFunction should be used primarily for observation. We raise3428 // an error if the page was reloaded during ClientFunction execution.3429 var executingClientFnDescriptor = this.contextStorage.getItem(EXECUTING_CLIENT_FUNCTION_DESCRIPTOR);3430 if (executingClientFnDescriptor) {3431 this._onReady(new DriverStatus({3432 isCommandResult: true,3433 executionError: new ClientFunctionExecutionInterruptionError(executingClientFnDescriptor.instantiationCallsiteName)3434 }));3435 return true;3436 }3437 return false;3438 };3439 Driver.prototype.onCustomClientScriptError = function (err, moduleName) {3440 var error = moduleName3441 ? new UncaughtErrorInCustomClientScriptLoadedFromModule(err, moduleName)3442 : new UncaughtErrorInCustomClientScriptCode(err);3443 if (!this.contextStorage.getItem(PENDING_PAGE_ERROR))3444 this.contextStorage.setItem(PENDING_PAGE_ERROR, error);3445 };3446 Driver.prototype._addChildWindowDriverLink = function (e) {3447 var childWindowDriverLink = new ChildWindowDriverLink(e.window, e.windowId);3448 this.childWindowDriverLinks.push(childWindowDriverLink);3449 this._ensureClosedChildWindowWatcher();3450 };3451 Driver.prototype._ensureClosedChildWindowWatcher = function () {3452 var _this = this;3453 if (this.checkClosedChildWindowIntervalId)3454 return;3455 this.checkClosedChildWindowIntervalId = nativeMethods$4.setInterval.call(window, function () {3456 var firstClosedChildWindowDriverLink = testCafeCore.arrayUtils.find(_this.childWindowDriverLinks, function (childWindowDriverLink) { return childWindowDriverLink.driverWindow.closed; });3457 if (!firstClosedChildWindowDriverLink)3458 return;3459 testCafeCore.arrayUtils.remove(_this.childWindowDriverLinks, firstClosedChildWindowDriverLink);3460 _this._setCurrentWindowAsMaster();3461 if (!_this.childWindowDriverLinks.length)3462 nativeMethods$4.clearInterval.call(window, _this.checkClosedChildWindowIntervalId);3463 }, CHECK_CHILD_WINDOW_CLOSED_INTERVAL);3464 };3465 Driver.prototype._setAsMasterInProgressOrCompleted = function () {3466 return this.setAsMasterInProgress || this.role === DriverRole.master;3467 };3468 Driver.prototype._setCurrentWindowAsMaster = function () {3469 var _this = this;3470 if (this._setAsMasterInProgressOrCompleted())3471 return;3472 this.setAsMasterInProgress = true;3473 Promise$2.resolve()3474 .then(function () {3475 return testCafeCore.browser.setActiveWindowId(_this.browserActiveWindowId, hammerhead__default.createNativeXHR, _this.windowId);3476 })3477 .then(function () {3478 _this._startInternal({3479 finalizePendingCommand: true,3480 isFirstRequestAfterWindowSwitching: true3481 });3482 _this.setAsMasterInProgress = false;3483 })3484 .catch(function () {3485 _this._onReady(new DriverStatus({3486 isCommandResult: true,3487 executionError: new CannotSwitchToWindowError()3488 }));3489 });3490 };3491 Driver.prototype._onChildWindowOpened = function (e) {3492 this._addChildWindowDriverLink(e);3493 this._switchToChildWindow(e.windowId);3494 };3495 // HACK: For https://github.com/DevExpress/testcafe/issues/35603496 // We have to cancel every form submit after a test is done3497 // to prevent requests to a closed session3498 Driver.prototype._onFormSubmit = function (e) {3499 // NOTE: We need to refactor this code to avoid the undefined value in contextStorage3500 // https://github.com/DevExpress/testcafe/issues/43603501 if (this.contextStorage && this.contextStorage.getItem(TEST_DONE_SENT_FLAG))3502 e.preventSubmit = true;3503 };3504 // Console messages3505 Driver.prototype._onConsoleMessage = function (_a) {3506 var meth = _a.meth, line = _a.line;3507 var messages = this.consoleMessages;3508 messages.addMessage(meth, line, this.windowId);3509 this.consoleMessages = messages;3510 };3511 // Status3512 Driver.prototype._addPendingErrorToStatus = function (status) {3513 var pendingPageError = this.contextStorage.getItem(PENDING_PAGE_ERROR);3514 if (pendingPageError) {3515 this.contextStorage.setItem(PENDING_PAGE_ERROR, null);3516 status.pageError = pendingPageError;3517 }3518 };3519 Driver.prototype._addUnexpectedDialogErrorToStatus = function (status) {3520 var dialogError = this.nativeDialogsTracker.getUnexpectedDialogError();3521 status.pageError = status.pageError || dialogError;3522 };3523 Driver.prototype._addConsoleMessagesToStatus = function (status) {3524 status.consoleMessages = this.consoleMessages;3525 this.consoleMessages = null;3526 };3527 Driver.prototype._addPendingWindowSwitchingStateToStatus = function (status) {3528 status.isPendingWindowSwitching = !!this.contextStorage.getItem(this.PENDING_WINDOW_SWITCHING_FLAG);3529 };3530 Driver.prototype._sendStatusRequest = function (status) {3531 var statusRequestOptions = {3532 cmd: TEST_RUN_MESSAGES.ready,3533 status: status,3534 disableResending: true,3535 allowRejecting: true3536 };3537 var requestAttempt = function () { return testCafeCore.getTimeLimitedPromise(transport.asyncServiceMsg(statusRequestOptions), SEND_STATUS_REQUEST_TIME_LIMIT); };3538 var retryRequest = function () { return testCafeCore.delay(SEND_STATUS_REQUEST_RETRY_DELAY).then(requestAttempt); };3539 var statusPromise = requestAttempt();3540 for (var i = 0; i < SEND_STATUS_REQUEST_RETRY_COUNT; i++)3541 statusPromise = statusPromise.catch(retryRequest);3542 return statusPromise;3543 };3544 Driver.prototype._sendStatus = function (status) {3545 var _this = this;3546 // NOTE: We should not modify the status if it is resent after3547 // the page load because the server has cached the response3548 if (!status.resent) {3549 this._addPendingErrorToStatus(status);3550 this._addUnexpectedDialogErrorToStatus(status);3551 this._addConsoleMessagesToStatus(status);3552 this._addPendingWindowSwitchingStateToStatus(status);3553 }3554 this.contextStorage.setItem(PENDING_STATUS, status);3555 var readyCommandResponse = null;3556 // NOTE: postpone status sending if the page is unloading3557 return testCafeCore.pageUnloadBarrier3558 .wait(0)3559 .then(function () { return _this._sendStatusRequest(status); })3560 //NOTE: do not execute the next command if the page is unloading3561 .then(function (res) {3562 readyCommandResponse = res;3563 return testCafeCore.pageUnloadBarrier.wait(0);3564 })3565 .then(function () {3566 _this.contextStorage.setItem(PENDING_STATUS, null);3567 return readyCommandResponse;3568 });3569 };3570 // Iframes and child windows interaction3571 Driver.prototype._addChildIframeDriverLink = function (id, driverWindow) {3572 var childIframeDriverLink = this._getChildIframeDriverLinkByWindow(driverWindow);3573 if (!childIframeDriverLink) {3574 var driverId = this.testRunId + "-" + generateId();3575 childIframeDriverLink = new ChildIframeDriverLink(driverWindow, driverId);3576 this.childIframeDriverLinks.push(childIframeDriverLink);3577 }3578 childIframeDriverLink.sendConfirmationMessage(id);3579 };3580 Driver.prototype._handleSetAsMasterMessage = function (msg, wnd) {3581 var _this = this;3582 // NOTE: The 'setAsMaster' message can be send a few times because3583 // the 'sendMessageToDriver' function resend messages if the message confirmation is not received in 1 sec.3584 // This message can be send even after driver is started.3585 if (this._setAsMasterInProgressOrCompleted())3586 return;3587 this.setAsMasterInProgress = true;3588 sendConfirmationMessage({3589 requestMsgId: msg.id,3590 window: wnd3591 });3592 Promise$2.resolve()3593 .then(function () {3594 return testCafeCore.browser.setActiveWindowId(_this.browserActiveWindowId, hammerhead__default.createNativeXHR, _this.windowId);3595 })3596 .then(function () {3597 _this._startInternal();3598 _this.setAsMasterInProgress = false;3599 })3600 .catch(function () {3601 _this._onReady(new DriverStatus({3602 isCommandResult: true,3603 executionError: new CannotSwitchToWindowError()3604 }));3605 });3606 };3607 Driver.prototype._handleCloseAllWindowsMessage = function (msg, wnd) {3608 var _this = this;3609 this._closeAllChildWindows()3610 .then(function () {3611 sendConfirmationMessage({3612 requestMsgId: msg.id,3613 window: wnd3614 });3615 })3616 .catch(function () {3617 _this._onReady(new DriverStatus({3618 isCommandResult: true,3619 executionError: new CloseChildWindowError()3620 }));3621 });3622 };3623 Driver.prototype._initChildDriverListening = function () {3624 var _this = this;3625 messageSandbox$2.on(messageSandbox$2.SERVICE_MSG_RECEIVED_EVENT, function (e) {3626 var msg = e.message;3627 var window = e.source;3628 if (msg.type === TYPE.establishConnection)3629 _this._addChildIframeDriverLink(msg.id, window);3630 else if (msg.type === TYPE.setAsMaster)3631 _this._handleSetAsMasterMessage(msg, window);3632 else if (msg.type === TYPE.closeAllChildWindows)3633 _this._handleCloseAllWindowsMessage(msg, window);3634 });3635 };3636 Driver.prototype._getChildIframeDriverLinkByWindow = function (driverWindow) {3637 return testCafeCore.arrayUtils.find(this.childIframeDriverLinks, function (link) { return link.driverWindow === driverWindow; });3638 };3639 Driver.prototype._getChildWindowDriverLinkByWindow = function (childDriverWindow) {3640 return testCafeCore.arrayUtils.find(this.childWindowDriverLinks, function (link) { return link.driverWindow === childDriverWindow; });3641 };3642 Driver.prototype._runInActiveIframe = function (command) {3643 var _this = this;3644 var runningChain = Promise$2.resolve();3645 var activeIframeSelector = this.contextStorage.getItem(ACTIVE_IFRAME_SELECTOR);3646 // NOTE: if the page was reloaded we restore the active child driver link via the iframe selector3647 if (!this.activeChildIframeDriverLink && activeIframeSelector)3648 runningChain = this._switchToIframe(activeIframeSelector, CURRENT_IFRAME_ERROR_CTORS);3649 runningChain3650 .then(function () {3651 _this.contextStorage.setItem(_this.EXECUTING_IN_IFRAME_FLAG, true);3652 return _this.activeChildIframeDriverLink.executeCommand(command, _this.speed);3653 })3654 .then(function (status) { return _this._onCommandExecutedInIframe(status); })3655 .catch(function (err) { return _this._onCommandExecutedInIframe(new DriverStatus({3656 isCommandResult: true,3657 executionError: err3658 })); });3659 };3660 Driver.prototype._onCommandExecutedInIframe = function (status) {3661 this.contextStorage.setItem(this.EXECUTING_IN_IFRAME_FLAG, false);3662 this._onReady(status);3663 };3664 Driver.prototype._ensureChildIframeDriverLink = function (iframeWindow, ErrorCtor, selectorTimeout) {3665 var _this = this;3666 // NOTE: a child iframe driver should establish connection with the parent when it's loaded.3667 // Here we are waiting while the appropriate child iframe driver do this if it didn't do yet.3668 return testCafeCore.waitFor(function () { return _this._getChildIframeDriverLinkByWindow(iframeWindow); }, CHECK_IFRAME_DRIVER_LINK_DELAY, selectorTimeout)3669 .catch(function () {3670 throw new ErrorCtor();3671 });3672 };3673 Driver.prototype._ensureChildWindowDriverLink = function (childWindow, ErrorCtor, timeout) {3674 var _this = this;3675 // NOTE: a child window driver should establish connection with the parent when it's loaded.3676 // Here we are waiting while the appropriate child window driver do this if it didn't do yet.3677 return testCafeCore.waitFor(function () { return _this._getChildWindowDriverLinkByWindow(childWindow); }, CHECK_CHILD_WINDOW_DRIVER_LINK_DELAY, timeout)3678 .catch(function () {3679 throw new ErrorCtor();3680 });3681 };3682 Driver.prototype._switchToIframe = function (selector, iframeErrorCtors) {3683 var _this = this;3684 var hasSpecificTimeout = typeof selector.timeout === 'number';3685 var commandSelectorTimeout = hasSpecificTimeout ? selector.timeout : this.selectorTimeout;3686 return getResult(selector, commandSelectorTimeout, null, function (fn) { return new iframeErrorCtors.NotFoundError(fn); }, function () { return new iframeErrorCtors.IsInvisibleError(); }, this.statusBar)3687 .then(function (iframe) {3688 if (!testCafeCore.domUtils.isIframeElement(iframe))3689 throw new ActionElementNotIframeError();3690 return _this._ensureChildIframeDriverLink(nativeMethods$4.contentWindowGetter.call(iframe), iframeErrorCtors.NotLoadedError, commandSelectorTimeout);3691 })3692 .then(function (childDriverLink) {3693 childDriverLink.availabilityTimeout = commandSelectorTimeout;3694 _this.activeChildIframeDriverLink = childDriverLink;3695 _this.contextStorage.setItem(ACTIVE_IFRAME_SELECTOR, selector);3696 });3697 };3698 Driver.prototype._createWaitForEventPromise = function (eventName, timeout) {3699 var _this = this;3700 var eventHandler = null;3701 var timeoutPromise = new Promise$2(function (resolve) {3702 nativeMethods$4.setTimeout.call(window, function () {3703 _this.off(eventName, eventHandler);3704 resolve();3705 }, timeout);3706 });3707 var resultPromise = new Promise$2(function (resolve) {3708 eventHandler = function () {3709 this.off(eventName, eventHandler);3710 resolve();3711 };3712 _this.on(eventName, eventHandler);3713 });3714 return Promise$2.race([timeoutPromise, resultPromise]);3715 };3716 Driver.prototype._waitForCurrentCommandCompletion = function () {3717 if (!this.contextStorage.getItem(this.COMMAND_EXECUTING_FLAG))3718 return Promise$2.resolve();3719 return this._createWaitForEventPromise(STATUS_WITH_COMMAND_RESULT_EVENT, COMMAND_EXECUTION_MAX_TIMEOUT);3720 };3721 Driver.prototype._waitForEmptyCommand = function () {3722 return this._createWaitForEventPromise(EMPTY_COMMAND_EVENT, EMPTY_COMMAND_EVENT_WAIT_TIMEOUT);3723 };3724 Driver.prototype._abortSwitchingToChildWindowIfItClosed = function () {3725 if (!this.activeChildWindowDriverLink.driverWindow.closed)3726 return;3727 testCafeCore.arrayUtils.remove(this.childWindowDriverLinks, this.activeChildWindowDriverLink);3728 this.activeChildWindowDriverLink = null;3729 throw new ChildWindowClosedBeforeSwitchingError();3730 };3731 Driver.prototype._switchToChildWindow = function (selector) {3732 var _this = this;3733 this.contextStorage.setItem(this.PENDING_WINDOW_SWITCHING_FLAG, true);3734 return executeChildWindowDriverLinkSelector(selector, this.childWindowDriverLinks)3735 .then(function (childWindowDriverLink) {3736 return _this._ensureChildWindowDriverLink(childWindowDriverLink.driverWindow, ChildWindowIsNotLoadedError, _this.childWindowReadyTimeout);3737 })3738 .then(function (childWindowDriverLink) {3739 _this.activeChildWindowDriverLink = childWindowDriverLink;3740 return _this._waitForCurrentCommandCompletion();3741 })3742 .then(function () {3743 return _this._waitForEmptyCommand();3744 })3745 .then(function () {3746 _this._abortSwitchingToChildWindowIfItClosed();3747 _this._stopInternal();3748 return _this.activeChildWindowDriverLink.setAsMaster();3749 })3750 .then(function () {3751 _this.contextStorage.setItem(_this.PENDING_WINDOW_SWITCHING_FLAG, false);3752 })3753 .catch(function (err) {3754 _this.contextStorage.setItem(_this.PENDING_WINDOW_SWITCHING_FLAG, false);3755 if (err instanceof ChildWindowClosedBeforeSwitchingError) {3756 _this._onReady(new DriverStatus());3757 return;3758 }3759 _this._onReady(new DriverStatus({3760 isCommandResult: true,3761 executionError: new CannotSwitchToWindowError()3762 }));3763 });3764 };3765 Driver.prototype._switchToTopParentWindow = function () {3766 var switchFn = this.parentWindowDriverLink.setTopOpenedWindowAsMaster.bind(this.parentWindowDriverLink);3767 this._switchToParentWindowInternal(switchFn);3768 };3769 Driver.prototype._switchToParentWindow = function () {3770 var switchFn = this.parentWindowDriverLink.setParentWindowAsMaster.bind(this.parentWindowDriverLink);3771 this._switchToParentWindowInternal(switchFn);3772 };3773 Driver.prototype._switchToParentWindowInternal = function (parentWindowSwitchFn) {3774 var _this = this;3775 this.contextStorage.setItem(this.PENDING_WINDOW_SWITCHING_FLAG, true);3776 return Promise$2.resolve()3777 .then(function () {3778 _this._stopInternal();3779 return parentWindowSwitchFn();3780 })3781 .then(function () {3782 _this.contextStorage.setItem(_this.PENDING_WINDOW_SWITCHING_FLAG, false);3783 })3784 .catch(function () {3785 _this.contextStorage.setItem(_this.PENDING_WINDOW_SWITCHING_FLAG, false);3786 _this._onReady(new DriverStatus({3787 isCommandResult: true,3788 executionError: new CannotSwitchToWindowError()3789 }));3790 });3791 };3792 Driver.prototype._switchToMainWindow = function (command) {3793 if (this.activeChildIframeDriverLink)3794 this.activeChildIframeDriverLink.executeCommand(command);3795 this.contextStorage.setItem(ACTIVE_IFRAME_SELECTOR, null);3796 this.activeChildIframeDriverLink = null;3797 };3798 Driver.prototype._setNativeDialogHandlerInIframes = function (dialogHandler) {3799 var msg = new SetNativeDialogHandlerMessage(dialogHandler);3800 for (var i = 0; i < this.childIframeDriverLinks.length; i++)3801 messageSandbox$2.sendServiceMsg(msg, this.childIframeDriverLinks[i].driverWindow);3802 };3803 // Commands handling3804 Driver.prototype._onActionCommand = function (command) {3805 var _this = this;3806 var _a = executeAction(command, this.selectorTimeout, this.statusBar, this.speed), startPromise = _a.startPromise, completionPromise = _a.completionPromise;3807 startPromise.then(function () { return _this.contextStorage.setItem(_this.COMMAND_EXECUTING_FLAG, true); });3808 completionPromise3809 .then(function (driverStatus) {3810 _this.contextStorage.setItem(_this.COMMAND_EXECUTING_FLAG, false);3811 return _this._onReady(driverStatus);3812 });3813 };3814 Driver.prototype._onSetNativeDialogHandlerCommand = function (command) {3815 this.nativeDialogsTracker.setHandler(command.dialogHandler);3816 this._setNativeDialogHandlerInIframes(command.dialogHandler);3817 this._onReady(new DriverStatus({ isCommandResult: true }));3818 };3819 Driver.prototype._onGetNativeDialogHistoryCommand = function () {3820 this._onReady(new DriverStatus({3821 isCommandResult: true,3822 result: this.nativeDialogsTracker.appearedDialogs3823 }));3824 };3825 Driver.prototype._onGetBrowserConsoleMessagesCommand = function () {3826 this._onReady(new DriverStatus({ isCommandResult: true }));3827 };3828 Driver.prototype._onNavigateToCommand = function (command) {3829 var _this = this;3830 this.contextStorage.setItem(this.COMMAND_EXECUTING_FLAG, true);3831 executeNavigateTo(command)3832 .then(function (driverStatus) {3833 _this.contextStorage.setItem(_this.COMMAND_EXECUTING_FLAG, false);3834 return _this._onReady(driverStatus);3835 });3836 };3837 Driver.prototype._onExecuteClientFunctionCommand = function (command) {3838 var _this = this;3839 this.contextStorage.setItem(EXECUTING_CLIENT_FUNCTION_DESCRIPTOR, { instantiationCallsiteName: command.instantiationCallsiteName });3840 var executor = new ClientFunctionExecutor(command);3841 executor.getResultDriverStatus()3842 .then(function (driverStatus) {3843 _this.contextStorage.setItem(EXECUTING_CLIENT_FUNCTION_DESCRIPTOR, null);3844 _this._onReady(driverStatus);3845 });...
execute-navigate-to.js
Source:execute-navigate-to.js
1import hammerhead from '../deps/hammerhead';2import testCafeCore from '../deps/testcafe-core';3import DriverStatus from '../status';4var Promise = hammerhead.Promise;5var RequestBarrier = testCafeCore.RequestBarrier;6var pageUnloadBarrier = testCafeCore.pageUnloadBarrier;7export default function executeNavigateTo (command) {8 var requestBarrier = new RequestBarrier();9 hammerhead.navigateTo(command.url);10 return Promise.all([requestBarrier.wait(), pageUnloadBarrier.wait()])11 .then(() => new DriverStatus({ isCommandResult: true }))12 .catch(err => new DriverStatus({ isCommandResult: true, executionError: err }));...
Using AI Code Generation
1import { Selector } from 'testcafe';2test('My first test', async t => {3 .typeText('#developer-name', 'John Smith')4 .click('#submit-button');5});6test('My second test', async t => {7 .typeText('#developer-name', 'John Smith')8 .click('#submit-button');9});10test('My third test', async t => {11 .typeText('#developer-name', 'John Smith')12 .click('#submit-button');13});14test('My fourth test', async t => {15 .typeText('#developer-name', 'John Smith')16 .click('#submit-button');17});18test('My fifth test', async t => {19 .typeText('#developer-name', 'John Smith')20 .click('#submit-button');21});22test('My sixth test', async t => {23 .typeText('#developer-name', 'John Smith')24 .click('#submit-button');25});26test('My seventh test', async t => {27 .typeText('#developer-name', 'John Smith')28 .click('#submit-button');29});30test('My eighth test', async t => {31 .typeText('#developer-name', 'John Smith')32 .click('#submit-button');33});34test('My ninth test', async t => {35 .typeText('#developer-name', 'John Smith')36 .click('#submit-button');37});38test('My tenth test', async t => {39 .typeText('#developer-name', 'John Smith')40 .click('#submit-button');41});
Using AI Code Generation
1import { Selector } from 'testcafe';2test('My first test', async t => {3 .typeText('#developer-name', 'John Smith')4 .click('#submit-button')5 .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');6});
Using AI Code Generation
1import { Selector } from 'testcafe';2test('My first test', async t => {3 .typeText('#developer-name', 'John Smith')4 .click('#submit-button')5 .wait(10000)6});
Using AI Code Generation
1import { Selector } from 'testcafe';2test('My first test', async t => {3 .typeText('#developer-name', 'John Smith')4 .click('#submit-button');5 const articleHeader = await Selector('.result-content').find('h1');6 let headerText = await articleHeader.innerText;7 let id = await articleHeader.id;8 let cssClass = await articleHeader.classNames;9 let color = await articleHeader.getStyleProperty('color');10 let tagName = await articleHeader.tagName;11 let headerNode = await articleHeader();12});13import { Selector } from 'testcafe';14test('My first test', async t => {15 .typeText('#developer-name', 'John Smith')16 .click('#submit-button');17 const articleHeader = await Selector('.result-content').find('h1');18 let headerText = await articleHeader.innerText;19 let id = await articleHeader.id;20 let cssClass = await articleHeader.classNames;21 let color = await articleHeader.getStyleProperty('color');22 let tagName = await articleHeader.tagName;23 let headerNode = await articleHeader();24});25import { Selector } from 'testcafe';26test('My first test', async t => {
Using AI Code Generation
1import { Selector } from 'testcafe';2test('My first test', async t => {3 .typeText('#developer-name', 'John Smith')4 .click('#submit-button');5});6test('My second test', async t => {7 .typeText('#developer-name', 'John Smith')8 .click('#submit-button');9});10test('My third test', async t => {11 .typeText('#developer-name', 'John Smith')12 .click('#submit-button');13});
Using AI Code Generation
1import { Selector } from 'testcafe';2test('My first test', async t => {3 .typeText('#developer-name', 'John Smith')4 .click('#submit-button');5});6import { Selector } from 'testcafe';7test('My first test', async t => {8 .typeText('#developer-name', 'John Smith')9 .click('#submit-button');10});11Your name to display (optional):12Your name to display (optional):13Your name to display (optional):
Using AI Code Generation
1import { Selector } from 'testcafe';2test('My first test', async t => {3 .typeText('#developer-name', 'John Smith')4 .click('#submit-button')5 .wait(5000);6});7test('Navigate to a different page', async t => {8 .typeText('#developer-name', 'John Smith')9 .click('#submit-button')10 .wait(5000);11});12test('Navigate to a different page', async t => {13 .typeText('#developer-name', 'John Smith')14 .click('#submit-button')15 .wait(5000);16});17test('Navigate to a different page', async t => {18 .typeText('#developer-name', 'John Smith')19 .click('#submit-button')20 .wait(5000);21});22test('Navigate to a different page', async t => {23 .typeText('#developer-name', 'John Smith')24 .click('#submit-button')25 .wait(5000);26});27test('Navigate to a different page', async t => {28 .typeText('#developer-name', 'John Smith')29 .click('#submit-button')30 .wait(5000);31});32test('Navigate to a different page', async t => {33 .typeText('#developer-name', 'John Smith')
Using AI Code Generation
1import { Selector } from 'testcafe';2test('My first test', async t => {3 .typeText('#developer-name', 'John Smith')4 .click('#submit-button');5 const articleHeader = await Selector('.result-content').find('h1');6 let headerText = await articleHeader.innerText;7 let id = await articleHeader.id;8 let headerNode = await articleHeader();9});10import { Selector } from 'testcafe';11test('My first test', async t => {12 .typeText('#developer-name', 'John Smith')13 .click('#submit-button');14 const articleHeader = await Selector('.result-content').find('h1');15 let headerText = await articleHeader.innerText;16 let id = await articleHeader.id;17 let headerNode = await articleHeader();18});
Using AI Code Generation
1import { Selector } from 'testcafe';2test('My first test', async t => {3 .click('#populate')4 .click('#submit-button');5});6import { Selector } from 'testcafe';7test('My first test', async t => {8 .click('#populate')9 .click('#submit-button');10});11import { Selector } from 'testcafe';12test('My first test', async t => {13 .click('#populate')14 .click('#submit-button');15});16import { Selector } from 'testcafe';17test('My first test', async t => {18 .click('#populate')19 .click('#submit-button');20});
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!