Best JavaScript code snippet using testcafe
index.js
Source:index.js  
...1553    function isSkippableNode(node) {1554        return !isRenderedNode(node) || isShadowUIElement(node);1555    }1556    //dom utils1557    function hasContentEditableAttr(el) {1558        var attrValue = el.getAttribute ? el.getAttribute('contenteditable') : null;1559        return attrValue === '' || attrValue === 'true';1560    }1561    function findContentEditableParent(element) {1562        var elParents = getParents(element);1563        if (hasContentEditableAttr(element) && isContentEditableElement(element))1564            return element;1565        var currentDocument = findDocument(element);1566        if (currentDocument.designMode === 'on')1567            return currentDocument.body;1568        return find(elParents, function (parent) { return hasContentEditableAttr(parent) &&1569            isContentEditableElement(parent); });1570    }1571    function getNearestCommonAncestor(node1, node2) {1572        if (isTheSameNode(node1, node2)) {1573            if (isTheSameNode(node2, findContentEditableParent(node1)))1574                return node1;1575            return hammerhead.nativeMethods.nodeParentNodeGetter.call(node1);1576        }1577        var ancestors = [];1578        var contentEditableParent = findContentEditableParent(node1);1579        var curNode = null;1580        if (!isElementContainsNode(contentEditableParent, node2))1581            return null;1582        for (curNode = node1; curNode !== contentEditableParent; curNode = hammerhead.nativeMethods.nodeParentNodeGetter.call(curNode))...content_editable_helper.js
Source:content_editable_helper.js  
...162    exports.findContentEditableParent = function (el) {163        var $elParents = $(el).parents(),164            currentDocument = null,165            parent = null;166        function hasContentEditableAttr(el) {167            return typeof $(el).attr('contenteditable') !== 'undefined' && $(el).attr('contenteditable') !== 'false' && $(el).attr('contenteditable') !== 'inherit';168        }169        if (hasContentEditableAttr(el) && Util.isContentEditableElement(el))170            return el;171        currentDocument = Util.findDocument(el);172        if (currentDocument.designMode === 'on')173            return currentDocument.body;174        $.each($elParents, function (index, item) {175            if (hasContentEditableAttr(item) && Util.isContentEditableElement(item)) {176                parent = item;177                return false;178            }179        });180        return parent;181    };182    exports.getNearestCommonAncestor = function (node1, node2) {183        if (Util.isTheSameNode(node1, node2)) {184            if (Util.isTheSameNode(node2, exports.findContentEditableParent(node1)))185                return node1;186            return node1.parentNode;187        }188        var ancestors = [],189            contentEditableParent = exports.findContentEditableParent(node1),...content-editable.js
Source:content-editable.js  
...167    return attrValue === '' || attrValue === 'true';168}169export function findContentEditableParent (element) {170    var elParents = domUtils.getParents(element);171    if (hasContentEditableAttr(element) && domUtils.isContentEditableElement(element))172        return element;173    var currentDocument = domUtils.findDocument(element);174    if (currentDocument.designMode === 'on')175        return currentDocument.body;176    return arrayUtils.find(elParents, parent => hasContentEditableAttr(parent) &&177                                                domUtils.isContentEditableElement(parent));178}179export function getNearestCommonAncestor (node1, node2) {180    if (domUtils.isTheSameNode(node1, node2)) {181        if (domUtils.isTheSameNode(node2, findContentEditableParent(node1)))182            return node1;183        return node1.parentNode;184    }185    var ancestors             = [];186    var contentEditableParent = findContentEditableParent(node1);187    var curNode               = null;188    if (!domUtils.isElementContainsNode(contentEditableParent, node2))189        return null;190    for (curNode = node1; curNode !== contentEditableParent; curNode = curNode.parentNode)...actionability.js
Source:actionability.js  
1const _ = require('lodash')2const $ = require('jquery')3const Promise = require('bluebird')4const debug = require('debug')('cypress:driver:actionability')5const $dom = require('../dom')6const $elements = require('../dom/elements')7const $errUtils = require('../cypress/error_utils')8const delay = 509const getFixedOrStickyEl = $dom.getFirstFixedOrStickyPositionParent10const getStickyEl = $dom.getFirstStickyPositionParent11const dispatchPrimedChangeEvents = function (state) {12  // if we have a changeEvent, dispatch it13  let changeEvent14  changeEvent = state('changeEvent')15  if (changeEvent) {16    return changeEvent()17  }18}19const scrollBehaviorOptionsMap = {20  top: 'start',21  bottom: 'end',22  center: 'center',23  nearest: 'nearest',24}25const getPositionFromArguments = function (positionOrX, y, options) {26  let position; let x27  if (_.isObject(positionOrX)) {28    options = positionOrX29    position = null30  } else if (_.isObject(y)) {31    options = y32    position = positionOrX33    y = null34    x = null35  } else if (_.every([positionOrX, y], _.isFinite)) {36    position = null37    x = positionOrX38  } else if (_.isString(positionOrX)) {39    position = positionOrX40  }41  return { options, position, x, y }42}43const ensureElIsNotCovered = function (cy, win, $el, fromElViewport, options, log, onScroll) {44  let $elAtCoords = null45  const getElementAtPointFromViewport = function (fromElViewport) {46    // get the element at point from the viewport based47    // on the desired x/y normalized coordinations48    let elAtCoords49    elAtCoords = $dom.getElementAtPointFromViewport(win.document, fromElViewport.x, fromElViewport.y)50    if (elAtCoords) {51      return $elAtCoords = $dom.wrap(elAtCoords)52    }53  }54  const ensureDescendents = function (fromElViewport) {55    // figure out the deepest element we are about to interact56    // with at these coordinates57    $elAtCoords = getElementAtPointFromViewport(fromElViewport)58    debug('elAtCoords', $elAtCoords)59    debug('el has pointer-events none?')60    cy.ensureElDoesNotHaveCSS($el, 'pointer-events', 'none', log)61    debug('is descendent of elAtCoords?')62    cy.ensureDescendents($el, $elAtCoords, log)63    return $elAtCoords64  }65  const ensureDescendentsAndScroll = function () {66    try {67      // use the initial coords fromElViewport68      return ensureDescendents(fromElViewport)69    } catch (err) {70      // if scrolling to element is off we re-throw as there is nothing to do71      if (options.scrollBehavior === false) {72        throw err73      }74      // if we're being covered by a fixed position element then75      // we're going to attempt to continously scroll the element76      // from underneath this fixed position element until we can't77      // anymore78      const $fixed = getFixedOrStickyEl($elAtCoords)79      debug('elAtCoords is fixed', !!$fixed)80      // if we dont have a fixed position81      // then just bail, cuz we need to retry async82      if (!$fixed) {83        throw err84      }85      const scrollContainerPastElement = function ($container, $fixed) {86        // get the width + height of the $fixed87        // since this is what we are scrolling past!88        const { width, height } = $dom.getElementPositioning($fixed)89        // what is this container currently scrolled?90        // using jquery here which normalizes window scroll props91        const currentScrollTop = $container.scrollTop()92        const currentScrollLeft = $container.scrollLeft()93        if (onScroll) {94          const type = $dom.isWindow($container) ? 'window' : 'container'95          onScroll($container, type)96        }97        // TODO: right here we could set all of the scrollable98        // containers on the log and include their scroll99        // positions.100        //101        // then the runner could ask the driver to scroll each one102        // into its correct position until it passed103        // if $dom.isWindow($container)104        //   log.set("scrollBy", { x: -width, y: -height })105        // we want to scroll in the opposite direction (up not down)106        // so just decrease the scrolled positions107        $container.scrollTop((currentScrollTop - height))108        return $container.scrollLeft((currentScrollLeft - width))109      }110      const getAllScrollables = function (scrollables, $el) {111        // nudge algorithm112        // starting at the element itself113        // walk up until and find all of the scrollable containers114        // until we reach null115        // then push in the window116        const $scrollableContainer = $dom.getFirstScrollableParent($el)117        if ($scrollableContainer) {118          scrollables.push($scrollableContainer)119          // recursively iterate120          return getAllScrollables(scrollables, $scrollableContainer)121        }122        // we're out of scrollable elements123        // so just push in $(win)124        scrollables.push($(win))125        return scrollables126      }127      // we want to scroll all of our containers until128      // this element becomes unhidden or retry async129      const scrollContainers = function (scrollables) {130        // hold onto all the elements we've scrolled131        // past in this cycle132        const elementsScrolledPast = []133        // pull off scrollables starting with the most outer134        // container which is window135        const $scrollableContainer = scrollables.pop()136        // we've reach the end of all the scrollables137        if (!$scrollableContainer) {138          // bail and just retry async139          throw err140        }141        const possiblyScrollMultipleTimes = function ($fixed) {142          // if we got something AND143          let needle144          if ($fixed && ((needle = $fixed.get(0), !elementsScrolledPast.includes(needle)))) {145            elementsScrolledPast.push($fixed.get(0))146            scrollContainerPastElement($scrollableContainer, $fixed)147            try {148              // now that we've changed scroll positions149              // we must recalculate whether this element is covered150              // since the element's top / left positions change.151              ({ fromElViewport } = getCoordinatesForEl(cy, $el, options))152              // this is a relative calculation based on the viewport153              // so these are the only coordinates we care about154              return ensureDescendents(fromElViewport)155            } catch (err) {156              // we failed here, but before scrolling the next container157              // we need to first verify that the element covering up158              // is the same one as before our scroll159              $elAtCoords = getElementAtPointFromViewport(fromElViewport)160              if ($elAtCoords) {161                // get the fixed element again162                $fixed = getFixedOrStickyEl($elAtCoords)163                // and possibly recursively scroll past it164                // if we haven't see it before165                return possiblyScrollMultipleTimes($fixed)166              }167              // getElementAtPoint was falsey, so target element is no longer in the viewport168              throw err169            }170          } else {171            return scrollContainers(scrollables)172          }173        }174        return possiblyScrollMultipleTimes($fixed)175      }176      // start nudging177      return scrollContainers(178        getAllScrollables([], $el),179      )180    }181  }182  try {183    ensureDescendentsAndScroll()184  } catch (error) {185    const err = error186    if (log) {187      log.set({188        consoleProps () {189          const obj = {}190          obj['Tried to Click'] = $dom.getElements($el)191          _.extend(obj, err.consoleProps)192          return obj193        },194      })195    }196    throw err197  }198  // return the final $elAtCoords199  return $elAtCoords200}201const getCoordinatesForEl = function (cy, $el, options) {202  // determine if this element is animating203  if (_.isFinite(options.x) && _.isFinite(options.y)) {204    return $dom.getElementCoordinatesByPositionRelativeToXY($el, options.x, options.y)205  }206  // Cypress.dom.getElementCoordinatesByPosition($el, options.position)207  return $dom.getElementCoordinatesByPosition($el, options.position)208}209const ensureNotAnimating = function (cy, $el, coordsHistory, animationDistanceThreshold) {210  // if we dont have at least 2 points211  // then automatically retry212  if (coordsHistory.length < 2) {213    $errUtils.throwErrByPath('dom.animation_coords_history_invalid')214  }215  // verify that our element is not currently animating216  // by verifying it is still at the same coordinates within217  // 5 pixels of x/y218  return cy.ensureElementIsNotAnimating($el, coordsHistory, animationDistanceThreshold)219}220const verify = function (cy, $el, options, callbacks) {221  _.defaults(options, {222    ensure: {223      position: true,224      visibility: true,225      notDisabled: true,226      notCovered: true,227      notAnimating: true,228      notReadonly: false,229      custom: false,230    },231  })232  const win = $dom.getWindowByElement($el.get(0))233  const { _log, force, position } = options234  const { onReady, onScroll } = callbacks235  if (!onReady) {236    throw new Error('actionability.verify must be passed an onReady callback')237  }238  // if we have a position we must validate239  // this ahead of time else bail early240  if (options.ensure.position && position) {241    try {242      cy.ensureValidPosition(position, _log)243    } catch (error) {244      // cannot proceed, give up245      const err = error246      return Promise.reject(err)247    }248  }249  return Promise.try(() => {250    let retryActionability251    const coordsHistory = []252    const runAllChecks = function () {253      let $elAtCoords254      if (force !== true) {255        // ensure it's attached256        cy.ensureAttached($el, null, _log)257        // ensure its 'receivable'258        if (options.ensure.notDisabled) {259          cy.ensureNotDisabled($el, _log)260        }261        if (options.scrollBehavior !== false) {262          // scroll the element into view263          const scrollBehavior = scrollBehaviorOptionsMap[options.scrollBehavior]264          $el.get(0).scrollIntoView({ block: scrollBehavior })265          debug('scrollIntoView:', $el[0])266          if (onScroll) {267            onScroll($el, 'element')268          }269        }270        // ensure its visible271        if (options.ensure.visibility) {272          cy.ensureVisibility($el, _log)273        }274        if (options.ensure.notReadonly) {275          cy.ensureNotReadonly($el, _log)276        }277        if (_.isFunction(options.custom)) {278          options.custom($el, _log)279        }280      }281      // now go get all the coords for this element282      const coords = getCoordinatesForEl(cy, $el, options)283      // if force is true OR waitForAnimations is false284      // then do not perform these additional ensures...285      if ((options.ensure.notAnimating) && (force !== true) && (options.waitForAnimations !== false)) {286        // store the coords that were absolute287        // from the window or from the viewport for sticky elements288        // (see https://github.com/cypress-io/cypress/pull/1478)289        const sticky = !!getStickyEl($el)290        coordsHistory.push(sticky ? coords.fromElViewport : coords.fromElWindow)291        // then we ensure the element isnt animating292        ensureNotAnimating(cy, $el, coordsHistory, options.animationDistanceThreshold)293      }294      if (force !== true) {295        // now that we know our element isn't animating its time296        // to figure out if it's being covered by another element.297        // this calculation is relative from the viewport so we298        // only care about fromElViewport coords299        $elAtCoords = options.ensure.notCovered && ensureElIsNotCovered(cy, win, $el, coords.fromElViewport, options, _log, onScroll)300      }301      // pass our final object into onReady302      const finalCoords = getCoordinatesForEl(cy, $el, options)303      let finalEl304      // When a contenteditable element is selected, we don't go deeper,305      // because it is treated as a rich text field to users.306      if ($elements.hasContenteditableAttr($el.get(0))) {307        finalEl = $el308      } else {309        finalEl = $elAtCoords != null ? $elAtCoords : $el310      }311      return onReady(finalEl, finalCoords)312    }313    // we cannot enforce async promises here because if our314    // element passes every single check, we MUST fire the event315    // synchronously else we risk the state changing between316    // the checks and firing the event!317    return (retryActionability = function () {318      try {319        return runAllChecks()320      } catch (err) {321        options.error = err322        return cy.retry(retryActionability, options)323      }324    })()325  })326}327module.exports = {328  delay,329  verify,330  dispatchPrimedChangeEvents,331  getPositionFromArguments,...Using AI Code Generation
1import { Selector } from 'testcafe';2test('My Test', async t => {3        .expect(Selector('div').with({ boundTestRun: t }).hasContentEditableAttr).ok()4        .expect(Selector('div').with({ boundTestRun: t }).hasContentEditableAttr).notOk()5        .expect(Selector('div').with({ boundTestRun: t }).hasContentEditableAttr).eql(true)6        .expect(Selector('div').with({ boundTestRun: t }).hasContentEditableAttr).notEql(true)7        .expect(Selector('div').with({ boundTestRun: t }).hasContentEditableAttr).contains(true)8        .expect(Selector('div').with({ boundTestRun: t }).hasContentEditableAttr).notContains(true)9        .expect(Selector('div').with({ boundTestRun: t }).hasContentEditableAttr).match(/true/)10        .expect(Selector('div').with({ boundTestRun: t }).hasContentEditableAttr).notMatch(/true/)11        .expect(Selector('div').with({ boundTestRun: t }).hasContentEditableAttr).typeOf('boolean')12        .expect(Selector('div').with({ boundTestRun: t }).hasContentEditableAttr).notTypeOf('boolean');13});Using AI Code Generation
1import { Selector } from 'testcafe';2test('Check hasContentEditableAttr', async t => {3    const editable = Selector('div').with({ hasContentEditableAttr: true });4    await t.expect(editable.exists).ok();5});6import { hasContentEditableAttr } from 'testcafe-browser-tools';7test('Check hasContentEditableAttr', async t => {8    const editable = await hasContentEditableAttr('div');9    await t.expect(editable).ok();10});Using AI Code Generation
1import { Selector } from 'testcafe';2test('Check if attribute exists', async t => {3    const hasContentEditableAttr = Selector('body').hasAttribute('contenteditable');4    await t.expect(hasContentEditableAttr).ok();5});6Your name to display (optional):7Your name to display (optional):8import { Selector } from 'testcafe';9test('Check if attribute exists', async t => {10    const hasContentEditableAttr = Selector('body').hasAttribute('contenteditable');11    await t.expect(hasContentEditableAtUsing AI Code Generation
1import { Selector } from 'testcafe';2test('My Test', async t => {3        .expect(Selector('div').find('div').nth(0).hasContentEditableAttr).eql(true)4        .expect(Selector('div').find('div').nth(1).hasContentEditableAttr).eql(true)5        .expect(Selector('div').find('div').nth(2).hasContentEditableAttr).eql(true)6        .expect(Selector('div').find('div').nth(3).hasContentEditableAttr).eql(true)7        .expect(Selector('div').find('div').nth(4).hasContentEditableAttr).eql(true)8        .expect(Selector('div').find('div').nth(5).hasContentEditableAttr).eql(true)9        .expect(Selector('div').find('div').nth(6).hasContentEditableAttr).eql(true)10        .expect(Selector('div').find('div').nth(7).hasContentEditableAttr).eql(true)11        .expect(Selector('div').find('div').nth(8).hasContentEditableAttr).eql(true)12        .expect(Selector('div').find('div').nth(9).hasContentEditableAttr).eql(true)13        .expect(Selector('div').find('div').nth(10).hasContentEditableAttr).eql(true)14        .expect(Selector('div').find('div').nth(11).hasContentEditableAttr).eql(true)15        .expect(Selector('div').find('div').nth(12).hasContentEditableAttr).eql(true)16        .expect(Selector('div').find('div').nth(13).hasContentEditableAttr).eql(true)17        .expect(Selector('div').find('div').nth(14).hasContentEditableAttr).eql(true)18        .expect(Selector('div').find('div').nth(15).hasContentEditableAttr).eql(true)19        .expect(Selector('div').find('div').nth(16).hasContentEditableAttr).eql(true)20        .expect(Selector('div').find('div').nth(17).hasContentEditableAttr).eql(true)21        .expect(Selector('div').find('Using AI Code Generation
1import { Selector } from 'testcafe';2test('test', async t => {3    await t.expect(Selector('#editor').hasContentEditableAttr).ok();4});5await t.expect(Selector('#editor').hasAttribute('contenteditable')).ok();6Your name to display (optional):7Your name to display (optional):8await t.expect(Selector('#editor').hasAttribute('contenteditable')).ok();9Your name to display (optional):Using AI Code Generation
1import { ClientFunction } from 'testcafe';2const hasContentEditableAttr = ClientFunction(() => {3    const element = document.getElementById('contenteditable-div');4    return element.hasAttribute('contenteditable');5});6test('TestCafe', async t => {7    await t.expect(hasContentEditableAttr()).eql(true);8});9import { ClientFunction } from 'testcafe';10const hasContentEditableAttr = ClientFunction(() => {11    const element = document.getElementById('contenteditable-div');12    return element.hasAttribute('contenteditable');13});14test('TestCafe', async t => {15    await t.expect(hasContentEditableAttr()).eql(false);16});17import { ClientFunction } from 'testcafe';18const hasContentEditableAttr = ClientFunction(() => {19    const element = document.getElementById('contenteditable-div');20    return element.hasAttribute('contenteditable');21});22test('TestCafe', async t => {23    await t.expect(hasContentEditableAttr()).eql(true);24});25import { ClientFunction } from 'testcafe';26const hasContentEditableAttr = ClientFunction(() => {27    const element = document.getElementById('contenteditable-div');28    return element.hasAttribute('contenteditable');29});30test('TestCafe', async t => {31    await t.expect(hasContentEditableAttr()).eql(false);32});Using AI Code Generation
1import { Selector } from 'testcafe';2test('Test', async t => {3        .expect(Selector('#gb').hasContentEditableAttr).ok();4});5import { Selector } from 'testcafe';6test('Test', async t => {7        .expect(Selector('#gb').with({ boundTestRun: t }).hasContentEditableAttr).ok();8});Using AI Code Generation
1import { Selector } from 'testcafe';2let selector = Selector('div');3let hasContentEditableAttr = selector.hasContentEditableAttr;4let hasContentEditableAttr = selector.hasContentEditableAttr;5let hasContentEditableAttr = selector.hasContentEditableAttr;6let hasContentEditableAttr = selector.hasContentEditableAttr('true');7let hasContentEditableAttr = selector.hasContentEditableAttr('false');8let hasContentEditableAttr = selector.hasContentEditableAttr(true);9let hasContentEditableAttr = selector.hasContentEditableAttr(false);10let hasContentEditableAttr = selector.hasContentEditableAttr('inherit');11let hasContentEditableAttr = selector.hasContentEditableAttr('plaintext-only');12let hasContentEditableAttr = selector.hasContentEditableAttr('true');13let hasContentEditableAttr = selector.hasContentEditableAttr('false');14let hasContentEditableAttr = selector.hasContentEditableAttr('inherit');15let hasContentEditableAttr = selector.hasContentEditableAttr('plaintext-only');16let hasContentEditableAttr = selector.hasContentEditableAttr('true');17let hasContentEditableAttr = selector.hasContentEditableAttr('false');18let hasContentEditableAttr = selector.hasContentEditableAttr('inherit');19let hasContentEditableAttr = selector.hasContentEditableAttr('plaintext-only');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!!
