Best JavaScript code snippet using playwright-internal
on.spec.js
Source:on.spec.js  
...18      el,19      template: '<div v-on:click="foo"></div>',20      methods: { foo: spy }21    })22    triggerEvent(vm.$el, 'click')23    expect(spy.calls.count()).toBe(1)24    const args = spy.calls.allArgs()25    const event = args[0] && args[0][0] || {}26    expect(event.type).toBe('click')27  })28  it('should bind event to a inline statement', () => {29    vm = new Vue({30      el,31      template: '<div v-on:click="foo(1,2,3,$event)"></div>',32      methods: { foo: spy }33    })34    triggerEvent(vm.$el, 'click')35    expect(spy.calls.count()).toBe(1)36    const args = spy.calls.allArgs()37    const firstArgs = args[0]38    expect(firstArgs.length).toBe(4)39    expect(firstArgs[0]).toBe(1)40    expect(firstArgs[1]).toBe(2)41    expect(firstArgs[2]).toBe(3)42    expect(firstArgs[3].type).toBe('click')43  })44  it('should support inline function expression', () => {45    const spy = jasmine.createSpy()46    vm = new Vue({47      el,48      template: `<div class="test" @click="function (e) { log(e.target.className) }"></div>`,49      methods: {50        log: spy51      }52    }).$mount()53    triggerEvent(vm.$el, 'click')54    expect(spy).toHaveBeenCalledWith('test')55  })56  it('should support shorthand', () => {57    vm = new Vue({58      el,59      template: '<a href="#test" @click.prevent="foo"></a>',60      methods: { foo: spy }61    })62    triggerEvent(vm.$el, 'click')63    expect(spy.calls.count()).toBe(1)64  })65  it('should support stop propagation', () => {66    vm = new Vue({67      el,68      template: `69        <div @click.stop="foo"></div>70      `,71      methods: { foo: spy }72    })73    const hash = window.location.hash74    triggerEvent(vm.$el, 'click')75    expect(window.location.hash).toBe(hash)76  })77  it('should support prevent default', () => {78    vm = new Vue({79      el,80      template: `81        <input type="checkbox" ref="input" @click.prevent="foo">82      `,83      methods: {84        foo ($event) {85          spy($event.defaultPrevented)86        }87      }88    })89    vm.$refs.input.checked = false90    triggerEvent(vm.$refs.input, 'click')91    expect(spy).toHaveBeenCalledWith(true)92  })93  it('should support capture', () => {94    const callOrder = []95    vm = new Vue({96      el,97      template: `98        <div @click.capture="foo">99          <div @click="bar"></div>100        </div>101      `,102      methods: {103        foo () { callOrder.push(1) },104        bar () { callOrder.push(2) }105      }106    })107    triggerEvent(vm.$el.firstChild, 'click')108    expect(callOrder.toString()).toBe('1,2')109  })110  it('should support once', () => {111    vm = new Vue({112      el,113      template: `114        <div @click.once="foo">115        </div>116      `,117      methods: { foo: spy }118    })119    triggerEvent(vm.$el, 'click')120    expect(spy.calls.count()).toBe(1)121    triggerEvent(vm.$el, 'click')122    expect(spy.calls.count()).toBe(1) // should no longer trigger123  })124  // #4655125  it('should handle .once on multiple elements properly', () => {126    vm = new Vue({127      el,128      template: `129        <div>130          <button ref="one" @click.once="foo">one</button>131          <button ref="two" @click.once="foo">two</button>132        </div>133      `,134      methods: { foo: spy }135    })136    triggerEvent(vm.$refs.one, 'click')137    expect(spy.calls.count()).toBe(1)138    triggerEvent(vm.$refs.one, 'click')139    expect(spy.calls.count()).toBe(1)140    triggerEvent(vm.$refs.two, 'click')141    expect(spy.calls.count()).toBe(2)142    triggerEvent(vm.$refs.one, 'click')143    triggerEvent(vm.$refs.two, 'click')144    expect(spy.calls.count()).toBe(2)145  })146  it('should support capture and once', () => {147    const callOrder = []148    vm = new Vue({149      el,150      template: `151        <div @click.capture.once="foo">152          <div @click="bar"></div>153        </div>154      `,155      methods: {156        foo () { callOrder.push(1) },157        bar () { callOrder.push(2) }158      }159    })160    triggerEvent(vm.$el.firstChild, 'click')161    expect(callOrder.toString()).toBe('1,2')162    triggerEvent(vm.$el.firstChild, 'click')163    expect(callOrder.toString()).toBe('1,2,2')164  })165  // #4846166  it('should support once and other modifiers', () => {167    vm = new Vue({168      el,169      template: `<div @click.once.self="foo"><span/></div>`,170      methods: { foo: spy }171    })172    triggerEvent(vm.$el.firstChild, 'click')173    expect(spy).not.toHaveBeenCalled()174    triggerEvent(vm.$el, 'click')175    expect(spy).toHaveBeenCalled()176    triggerEvent(vm.$el, 'click')177    expect(spy.calls.count()).toBe(1)178  })179  it('should support keyCode', () => {180    vm = new Vue({181      el,182      template: `<input @keyup.enter="foo">`,183      methods: { foo: spy }184    })185    triggerEvent(vm.$el, 'keyup', e => {186      e.keyCode = 13187    })188    expect(spy).toHaveBeenCalled()189  })190  it('should support automatic key name inference', () => {191    vm = new Vue({192      el,193      template: `<input @keyup.arrow-right="foo">`,194      methods: { foo: spy }195    })196    triggerEvent(vm.$el, 'keyup', e => {197      e.key = 'ArrowRight'198    })199    expect(spy).toHaveBeenCalled()200  })201  // ctrl, shift, alt, meta202  it('should support system modifers', () => {203    vm = new Vue({204      el,205      template: `206        <div>207          <input ref="ctrl" @keyup.ctrl="foo">208          <input ref="shift" @keyup.shift="foo">209          <input ref="alt" @keyup.alt="foo">210          <input ref="meta" @keyup.meta="foo">211        </div>212      `,213      methods: { foo: spy }214    })215    triggerEvent(vm.$refs.ctrl, 'keyup')216    expect(spy.calls.count()).toBe(0)217    triggerEvent(vm.$refs.ctrl, 'keyup', e => { e.ctrlKey = true })218    expect(spy.calls.count()).toBe(1)219    triggerEvent(vm.$refs.shift, 'keyup')220    expect(spy.calls.count()).toBe(1)221    triggerEvent(vm.$refs.shift, 'keyup', e => { e.shiftKey = true })222    expect(spy.calls.count()).toBe(2)223    triggerEvent(vm.$refs.alt, 'keyup')224    expect(spy.calls.count()).toBe(2)225    triggerEvent(vm.$refs.alt, 'keyup', e => { e.altKey = true })226    expect(spy.calls.count()).toBe(3)227    triggerEvent(vm.$refs.meta, 'keyup')228    expect(spy.calls.count()).toBe(3)229    triggerEvent(vm.$refs.meta, 'keyup', e => { e.metaKey = true })230    expect(spy.calls.count()).toBe(4)231  })232  it('should support exact modifier', () => {233    vm = new Vue({234      el,235      template: `236        <div>237          <input ref="ctrl" @keyup.exact="foo">238        </div>239      `,240      methods: { foo: spy }241    })242    triggerEvent(vm.$refs.ctrl, 'keyup')243    expect(spy.calls.count()).toBe(1)244    triggerEvent(vm.$refs.ctrl, 'keyup', e => {245      e.ctrlKey = true246    })247    expect(spy.calls.count()).toBe(1)248    // should not trigger if has other system modifiers249    triggerEvent(vm.$refs.ctrl, 'keyup', e => {250      e.ctrlKey = true251      e.altKey = true252    })253    expect(spy.calls.count()).toBe(1)254  })255  it('should support system modifiers with exact', () => {256    vm = new Vue({257      el,258      template: `259        <div>260          <input ref="ctrl" @keyup.ctrl.exact="foo">261        </div>262      `,263      methods: { foo: spy }264    })265    triggerEvent(vm.$refs.ctrl, 'keyup')266    expect(spy.calls.count()).toBe(0)267    triggerEvent(vm.$refs.ctrl, 'keyup', e => {268      e.ctrlKey = true269    })270    expect(spy.calls.count()).toBe(1)271    // should not trigger if has other system modifiers272    triggerEvent(vm.$refs.ctrl, 'keyup', e => {273      e.ctrlKey = true274      e.altKey = true275    })276    expect(spy.calls.count()).toBe(1)277  })278  it('should support number keyCode', () => {279    vm = new Vue({280      el,281      template: `<input @keyup.13="foo">`,282      methods: { foo: spy }283    })284    triggerEvent(vm.$el, 'keyup', e => {285      e.keyCode = 13286    })287    expect(spy).toHaveBeenCalled()288  })289  it('should support mouse modifier', () => {290    const left = 0291    const middle = 1292    const right = 2293    const spyLeft = jasmine.createSpy()294    const spyMiddle = jasmine.createSpy()295    const spyRight = jasmine.createSpy()296    vm = new Vue({297      el,298      template: `299        <div>300          <div ref="left" @mousedown.left="foo">left</div>301          <div ref="right" @mousedown.right="foo1">right</div>302          <div ref="middle" @mousedown.middle="foo2">right</div>303        </div>304      `,305      methods: {306        foo: spyLeft,307        foo1: spyRight,308        foo2: spyMiddle309      }310    })311    triggerEvent(vm.$refs.left, 'mousedown', e => { e.button = right })312    triggerEvent(vm.$refs.left, 'mousedown', e => { e.button = middle })313    expect(spyLeft).not.toHaveBeenCalled()314    triggerEvent(vm.$refs.left, 'mousedown', e => { e.button = left })315    expect(spyLeft).toHaveBeenCalled()316    triggerEvent(vm.$refs.right, 'mousedown', e => { e.button = left })317    triggerEvent(vm.$refs.right, 'mousedown', e => { e.button = middle })318    expect(spyRight).not.toHaveBeenCalled()319    triggerEvent(vm.$refs.right, 'mousedown', e => { e.button = right })320    expect(spyRight).toHaveBeenCalled()321    triggerEvent(vm.$refs.middle, 'mousedown', e => { e.button = left })322    triggerEvent(vm.$refs.middle, 'mousedown', e => { e.button = right })323    expect(spyMiddle).not.toHaveBeenCalled()324    triggerEvent(vm.$refs.middle, 'mousedown', e => { e.button = middle })325    expect(spyMiddle).toHaveBeenCalled()326  })327  it('should support KeyboardEvent.key for built in aliases', () => {328    vm = new Vue({329      el,330      template: `331        <div>332          <input ref="enter" @keyup.enter="foo">333          <input ref="space" @keyup.space="foo">334          <input ref="esc" @keyup.esc="foo">335          <input ref="left" @keyup.left="foo">336          <input ref="delete" @keyup.delete="foo">337        </div>338      `,339      methods: { foo: spy }340    })341    triggerEvent(vm.$refs.enter, 'keyup', e => { e.key = 'Enter' })342    expect(spy.calls.count()).toBe(1)343    triggerEvent(vm.$refs.space, 'keyup', e => { e.key = ' ' })344    expect(spy.calls.count()).toBe(2)345    triggerEvent(vm.$refs.esc, 'keyup', e => { e.key = 'Escape' })346    expect(spy.calls.count()).toBe(3)347    triggerEvent(vm.$refs.left, 'keyup', e => { e.key = 'ArrowLeft' })348    expect(spy.calls.count()).toBe(4)349    triggerEvent(vm.$refs.delete, 'keyup', e => { e.key = 'Backspace' })350    expect(spy.calls.count()).toBe(5)351    triggerEvent(vm.$refs.delete, 'keyup', e => { e.key = 'Delete' })352    expect(spy.calls.count()).toBe(6)353  })354  it('should support custom keyCode', () => {355    Vue.config.keyCodes.test = 1356    vm = new Vue({357      el,358      template: `<input @keyup.test="foo">`,359      methods: { foo: spy }360    })361    triggerEvent(vm.$el, 'keyup', e => {362      e.keyCode = 1363    })364    expect(spy).toHaveBeenCalled()365    Vue.config.keyCodes = Object.create(null)366  })367  it('should override built-in keyCode', () => {368    Vue.config.keyCodes.up = [1, 87]369    vm = new Vue({370      el,371      template: `<input @keyup.up="foo" @keyup.down="foo">`,372      methods: { foo: spy }373    })374    triggerEvent(vm.$el, 'keyup', e => {375      e.keyCode = 87376    })377    expect(spy).toHaveBeenCalled()378    triggerEvent(vm.$el, 'keyup', e => {379      e.keyCode = 1380    })381    expect(spy).toHaveBeenCalledTimes(2)382    // should not affect built-in down keycode383    triggerEvent(vm.$el, 'keyup', e => {384      e.keyCode = 40385    })386    expect(spy).toHaveBeenCalledTimes(3)387    Vue.config.keyCodes = Object.create(null)388  })389  it('should bind to a child component', () => {390    vm = new Vue({391      el,392      template: '<bar @custom="foo"></bar>',393      methods: { foo: spy },394      components: {395        bar: {396          template: '<span>Hello</span>'397        }398      }399    })400    vm.$children[0].$emit('custom', 'foo', 'bar')401    expect(spy).toHaveBeenCalledWith('foo', 'bar')402  })403  it('should be able to bind native events for a child component', () => {404    vm = new Vue({405      el,406      template: '<bar @click.native="foo"></bar>',407      methods: { foo: spy },408      components: {409        bar: {410          template: '<span>Hello</span>'411        }412      }413    })414    vm.$children[0].$emit('click')415    expect(spy).not.toHaveBeenCalled()416    triggerEvent(vm.$children[0].$el, 'click')417    expect(spy).toHaveBeenCalled()418  })419  it('should throw a warning if native modifier is used on native HTML element', () => {420    vm = new Vue({421      el,422      template: `423        <button @click.native="foo"></button>424      `,425      methods: { foo: spy },426    })427    triggerEvent(vm.$el, 'click')428    expect(`The .native modifier for v-on is only valid on components but it was used on <button>.`).toHaveBeenWarned()429    expect(spy.calls.count()).toBe(0)430  })431  it('.once modifier should work with child components', () => {432    vm = new Vue({433      el,434      template: '<bar @custom.once="foo"></bar>',435      methods: { foo: spy },436      components: {437        bar: {438          template: '<span>Hello</span>'439        }440      }441    })442    vm.$children[0].$emit('custom')443    expect(spy.calls.count()).toBe(1)444    vm.$children[0].$emit('custom')445    expect(spy.calls.count()).toBe(1) // should not be called again446  })447  it('remove listener', done => {448    const spy2 = jasmine.createSpy('remove listener')449    vm = new Vue({450      el,451      methods: { foo: spy, bar: spy2 },452      data: {453        ok: true454      },455      render (h) {456        return this.ok457          ? h('input', { on: { click: this.foo }})458          : h('input', { on: { input: this.bar }})459      }460    })461    triggerEvent(vm.$el, 'click')462    expect(spy.calls.count()).toBe(1)463    expect(spy2.calls.count()).toBe(0)464    vm.ok = false465    waitForUpdate(() => {466      triggerEvent(vm.$el, 'click')467      expect(spy.calls.count()).toBe(1) // should no longer trigger468      triggerEvent(vm.$el, 'input')469      expect(spy2.calls.count()).toBe(1)470    }).then(done)471  })472  it('remove capturing listener', done => {473    const spy2 = jasmine.createSpy('remove listener')474    vm = new Vue({475      el,476      methods: { foo: spy, bar: spy2, stopped (ev) { ev.stopPropagation() } },477      data: {478        ok: true479      },480      render (h) {481        return this.ok482          ? h('div', { on: { '!click': this.foo }}, [h('div', { on: { click: this.stopped }})])483          : h('div', { on: { mouseOver: this.bar }}, [h('div')])484      }485    })486    triggerEvent(vm.$el.firstChild, 'click')487    expect(spy.calls.count()).toBe(1)488    expect(spy2.calls.count()).toBe(0)489    vm.ok = false490    waitForUpdate(() => {491      triggerEvent(vm.$el.firstChild, 'click')492      expect(spy.calls.count()).toBe(1) // should no longer trigger493      triggerEvent(vm.$el, 'mouseOver')494      expect(spy2.calls.count()).toBe(1)495    }).then(done)496  })497  it('remove once listener', done => {498    const spy2 = jasmine.createSpy('remove listener')499    vm = new Vue({500      el,501      methods: { foo: spy, bar: spy2 },502      data: {503        ok: true504      },505      render (h) {506        return this.ok507          ? h('input', { on: { '~click': this.foo }})508          : h('input', { on: { input: this.bar }})509      }510    })511    triggerEvent(vm.$el, 'click')512    expect(spy.calls.count()).toBe(1)513    triggerEvent(vm.$el, 'click')514    expect(spy.calls.count()).toBe(1) // should no longer trigger515    expect(spy2.calls.count()).toBe(0)516    vm.ok = false517    waitForUpdate(() => {518      triggerEvent(vm.$el, 'click')519      expect(spy.calls.count()).toBe(1) // should no longer trigger520      triggerEvent(vm.$el, 'input')521      expect(spy2.calls.count()).toBe(1)522    }).then(done)523  })524  it('remove capturing and once listener', done => {525    const spy2 = jasmine.createSpy('remove listener')526    vm = new Vue({527      el,528      methods: { foo: spy, bar: spy2, stopped (ev) { ev.stopPropagation() } },529      data: {530        ok: true531      },532      render (h) {533        return this.ok534          ? h('div', { on: { '~!click': this.foo }}, [h('div', { on: { click: this.stopped }})])535          : h('div', { on: { mouseOver: this.bar }}, [h('div')])536      }537    })538    triggerEvent(vm.$el.firstChild, 'click')539    expect(spy.calls.count()).toBe(1)540    triggerEvent(vm.$el.firstChild, 'click')541    expect(spy.calls.count()).toBe(1) // should no longer trigger542    expect(spy2.calls.count()).toBe(0)543    vm.ok = false544    waitForUpdate(() => {545      triggerEvent(vm.$el.firstChild, 'click')546      expect(spy.calls.count()).toBe(1) // should no longer trigger547      triggerEvent(vm.$el, 'mouseOver')548      expect(spy2.calls.count()).toBe(1)549    }).then(done)550  })551  it('remove listener on child component', done => {552    const spy2 = jasmine.createSpy('remove listener')553    vm = new Vue({554      el,555      methods: { foo: spy, bar: spy2 },556      data: {557        ok: true558      },559      components: {560        test: {561          template: '<div></div>'562        }563      },564      render (h) {565        return this.ok566          ? h('test', { on: { foo: this.foo }})567          : h('test', { on: { bar: this.bar }})568      }569    })570    vm.$children[0].$emit('foo')571    expect(spy.calls.count()).toBe(1)572    expect(spy2.calls.count()).toBe(0)573    vm.ok = false574    waitForUpdate(() => {575      vm.$children[0].$emit('foo')576      expect(spy.calls.count()).toBe(1) // should no longer trigger577      vm.$children[0].$emit('bar')578      expect(spy2.calls.count()).toBe(1)579    }).then(done)580  })581  it('warn missing handlers', () => {582    vm = new Vue({583      el,584      data: { none: null },585      template: `<div @click="none"></div>`586    })587    expect(`Invalid handler for event "click": got null`).toHaveBeenWarned()588    expect(() => {589      triggerEvent(vm.$el, 'click')590    }).not.toThrow()591  })592  // Github Issue #5046593  it('should support keyboard modifier for direction keys', () => {594    const spyLeft = jasmine.createSpy()595    const spyRight = jasmine.createSpy()596    const spyUp = jasmine.createSpy()597    const spyDown = jasmine.createSpy()598    vm = new Vue({599      el,600      template: `601        <div>602          <input ref="left" @keydown.left="foo"></input>603          <input ref="right" @keydown.right="foo1"></input>604          <input ref="up" @keydown.up="foo2"></input>605          <input ref="down" @keydown.down="foo3"></input>606        </div>607      `,608      methods: {609        foo: spyLeft,610        foo1: spyRight,611        foo2: spyUp,612        foo3: spyDown613      }614    })615    triggerEvent(vm.$refs.left, 'keydown', e => { e.keyCode = 37 })616    triggerEvent(vm.$refs.left, 'keydown', e => { e.keyCode = 39 })617    triggerEvent(vm.$refs.right, 'keydown', e => { e.keyCode = 39 })618    triggerEvent(vm.$refs.right, 'keydown', e => { e.keyCode = 38 })619    triggerEvent(vm.$refs.up, 'keydown', e => { e.keyCode = 38 })620    triggerEvent(vm.$refs.up, 'keydown', e => { e.keyCode = 37 })621    triggerEvent(vm.$refs.down, 'keydown', e => { e.keyCode = 40 })622    triggerEvent(vm.$refs.down, 'keydown', e => { e.keyCode = 39 })623    expect(spyLeft.calls.count()).toBe(1)624    expect(spyRight.calls.count()).toBe(1)625    expect(spyUp.calls.count()).toBe(1)626    expect(spyDown.calls.count()).toBe(1)627  })628  // This test case should only run when the test browser supports passive.629  if (supportsPassive) {630    it('should support passive', () => {631      vm = new Vue({632        el,633        template: `634          <div>635            <input type="checkbox" ref="normal" @click="foo"/>636            <input type="checkbox" ref="passive" @click.passive="foo"/>637            <input type="checkbox" ref="exclusive" @click.prevent.passive/>638          </div>639        `,640        methods: {641          foo (e) {642            e.preventDefault()643          }644        }645      })646      vm.$refs.normal.checked = false647      vm.$refs.passive.checked = false648      vm.$refs.exclusive.checked = false649      vm.$refs.normal.click()650      vm.$refs.passive.click()651      vm.$refs.exclusive.click()652      expect(vm.$refs.normal.checked).toBe(false)653      expect(vm.$refs.passive.checked).toBe(true)654      expect(vm.$refs.exclusive.checked).toBe(true)655      expect('passive and prevent can\'t be used together. Passive handler can\'t prevent default event.').toHaveBeenWarned()656    })657  }658  // GitHub Issues #5146659  it('should only prevent when match keycode', () => {660    let prevented = false661    vm = new Vue({662      el,663      template: `664        <input ref="input" @keydown.enter.prevent="foo">665      `,666      methods: {667        foo ($event) {668          prevented = $event.defaultPrevented669        }670      }671    })672    triggerEvent(vm.$refs.input, 'keydown', e => { e.keyCode = 32 })673    expect(prevented).toBe(false)674    triggerEvent(vm.$refs.input, 'keydown', e => { e.keyCode = 13 })675    expect(prevented).toBe(true)676  })677  it('should transform click.right to contextmenu', () => {678    const spy = jasmine.createSpy('click.right')679    const vm = new Vue({680      template: `<div @click.right="foo"></div>`,681      methods: { foo: spy }682    }).$mount()683    triggerEvent(vm.$el, 'contextmenu')684    expect(spy).toHaveBeenCalled()685  })686  it('should transform click.middle to mouseup', () => {687    const spy = jasmine.createSpy('click.middle')688    vm = new Vue({689      el,690      template: `<div @click.middle="foo"></div>`,691      methods: { foo: spy }692    })693    triggerEvent(vm.$el, 'mouseup', e => { e.button = 0 })694    expect(spy).not.toHaveBeenCalled()695    triggerEvent(vm.$el, 'mouseup', e => { e.button = 1 })696    expect(spy).toHaveBeenCalled()697  })698  it('object syntax (no argument)', () => {699    const click = jasmine.createSpy('click')700    const mouseup = jasmine.createSpy('mouseup')701    vm = new Vue({702      el,703      template: `<button v-on="listeners">foo</button>`,704      created () {705        this.listeners = {706          click,707          mouseup708        }709      }710    })711    triggerEvent(vm.$el, 'click')712    expect(click.calls.count()).toBe(1)713    expect(mouseup.calls.count()).toBe(0)714    triggerEvent(vm.$el, 'mouseup')715    expect(click.calls.count()).toBe(1)716    expect(mouseup.calls.count()).toBe(1)717  })718  it('object syntax (no argument, mixed with normal listeners)', () => {719    const click1 = jasmine.createSpy('click1')720    const click2 = jasmine.createSpy('click2')721    const mouseup = jasmine.createSpy('mouseup')722    vm = new Vue({723      el,724      template: `<button v-on="listeners" @click="click2">foo</button>`,725      created () {726        this.listeners = {727          click: click1,728          mouseup729        }730      },731      methods: {732        click2733      }734    })735    triggerEvent(vm.$el, 'click')736    expect(click1.calls.count()).toBe(1)737    expect(click2.calls.count()).toBe(1)738    expect(mouseup.calls.count()).toBe(0)739    triggerEvent(vm.$el, 'mouseup')740    expect(click1.calls.count()).toBe(1)741    expect(click2.calls.count()).toBe(1)742    expect(mouseup.calls.count()).toBe(1)743  })744  it('object syntax (usage in HOC, mixed with native listeners)', () => {745    const click = jasmine.createSpy('click')746    const mouseup = jasmine.createSpy('mouseup')747    const mousedown = jasmine.createSpy('mousedown')748    vm = new Vue({749      el,750      template: `751        <foo-button752          @click="click"753          @mousedown="mousedown"754          @mouseup.native="mouseup">755        </foo-button>756      `,757      methods: {758        click,759        mouseup,760        mousedown761      },762      components: {763        fooButton: {764          template: `765            <button v-on="$listeners"></button>766          `767        }768      }769    })770    triggerEvent(vm.$el, 'click')771    expect(click.calls.count()).toBe(1)772    expect(mouseup.calls.count()).toBe(0)773    expect(mousedown.calls.count()).toBe(0)774    triggerEvent(vm.$el, 'mouseup')775    expect(click.calls.count()).toBe(1)776    expect(mouseup.calls.count()).toBe(1)777    expect(mousedown.calls.count()).toBe(0)778    triggerEvent(vm.$el, 'mousedown')779    expect(click.calls.count()).toBe(1)780    expect(mouseup.calls.count()).toBe(1)781    expect(mousedown.calls.count()).toBe(1)782  })783  // #6805 (v-on="object" bind order problem)784  it('object syntax (no argument): should fire after high-priority listeners', done => {785    const MyCheckbox = {786      template: '<input type="checkbox" v-model="model" v-on="$listeners">',787      props: {788        value: false789      },790      computed: {791        model: {792          get () {793            return this.value794          },795          set (val) {796            this.$emit('input', val)797          }798        }799      }800    }801    vm = new Vue({802      el,803      template: `804        <div>805          <my-checkbox v-model="check" @change="change"></my-checkbox>806        </div>807      `,808      components: { MyCheckbox },809      data: {810        check: false811      },812      methods: {813        change () {814          expect(this.check).toBe(true)815          done()816        }817      }818    })819    vm.$el.querySelector('input').click()820  })821  it('warn object syntax with modifier', () => {822    new Vue({823      template: `<button v-on.self="{}"></button>`824    }).$mount()825    expect(`v-on without argument does not support modifiers`).toHaveBeenWarned()826  })827  it('warn object syntax with non-object value', () => {828    new Vue({829      template: `<button v-on="123"></button>`830    }).$mount()831    expect(`v-on without argument expects an Object value`).toHaveBeenWarned()832  })833  it('should correctly remove once listener', done => {834    const vm = new Vue({835      template: `836        <div>837          <span v-if="ok" @click.once="foo">838            a839          </span>840          <span v-else a="a">841            b842          </span>843        </div>844      `,845      data: {846        ok: true847      },848      methods: {849        foo: spy850      }851    }).$mount()852    vm.ok = false853    waitForUpdate(() => {854      triggerEvent(vm.$el.childNodes[0], 'click')855      expect(spy.calls.count()).toBe(0)856    }).then(done)857  })858  // #7628859  it('handler should return the return value of inline function invocation', () => {860    let value861    new Vue({862      template: `<test @foo="bar()"></test>`,863      methods: {864        bar() {865          return 1866        }867      },868      components: {869        test: {870          created() {871            value = this.$listeners.foo()872          },873          render(h) {874            return h('div')875          }876        }877      }878    }).$mount()879    expect(value).toBe(1)880  })881  describe('dynamic arguments', () => {882    it('basic', done => {883      const spy = jasmine.createSpy()884      const vm = new Vue({885        template: `<div v-on:[key]="spy"></div>`,886        data: {887          key: 'click'888        },889        methods: {890          spy891        }892      }).$mount()893      triggerEvent(vm.$el, 'click')894      expect(spy.calls.count()).toBe(1)895      vm.key = 'mouseup'896      waitForUpdate(() => {897        triggerEvent(vm.$el, 'click')898        expect(spy.calls.count()).toBe(1)899        triggerEvent(vm.$el, 'mouseup')900        expect(spy.calls.count()).toBe(2)901        // explicit null value902        vm.key = null903      }).then(() => {904        triggerEvent(vm.$el, 'click')905        expect(spy.calls.count()).toBe(2)906        triggerEvent(vm.$el, 'mouseup')907        expect(spy.calls.count()).toBe(2)908      }).then(done)909    })910    it('shorthand', done => {911      const spy = jasmine.createSpy()912      const vm = new Vue({913        template: `<div @[key]="spy"></div>`,914        data: {915          key: 'click'916        },917        methods: {918          spy919        }920      }).$mount()921      triggerEvent(vm.$el, 'click')922      expect(spy.calls.count()).toBe(1)923      vm.key = 'mouseup'924      waitForUpdate(() => {925        triggerEvent(vm.$el, 'click')926        expect(spy.calls.count()).toBe(1)927        triggerEvent(vm.$el, 'mouseup')928        expect(spy.calls.count()).toBe(2)929      }).then(done)930    })931    it('with .middle modifier', () => {932      const spy = jasmine.createSpy()933      const vm = new Vue({934        template: `<div @[key].middle="spy"></div>`,935        data: {936          key: 'click'937        },938        methods: {939          spy940        }941      }).$mount()942      triggerEvent(vm.$el, 'mouseup', e => { e.button = 0 })943      expect(spy).not.toHaveBeenCalled()944      triggerEvent(vm.$el, 'mouseup', e => { e.button = 1 })945      expect(spy).toHaveBeenCalled()946    })947    it('with .right modifier', () => {948      const spy = jasmine.createSpy()949      const vm = new Vue({950        template: `<div @[key].right="spy"></div>`,951        data: {952          key: 'click'953        },954        methods: {955          spy956        }957      }).$mount()958      triggerEvent(vm.$el, 'contextmenu')959      expect(spy).toHaveBeenCalled()960    })961    it('with .capture modifier', () => {962      const callOrder = []963      const vm = new Vue({964        template: `965          <div @[key].capture="foo">966            <div @[key]="bar"></div>967          </div>968        `,969        data: {970          key: 'click'971        },972        methods: {973          foo () { callOrder.push(1) },974          bar () { callOrder.push(2) }975        }976      }).$mount()977      triggerEvent(vm.$el.firstChild, 'click')978      expect(callOrder.toString()).toBe('1,2')979    })980    it('with .once modifier', () => {981      const vm = new Vue({982        template: `<div @[key].once="foo"></div>`,983        data: { key: 'click' },984        methods: { foo: spy }985      }).$mount()986      triggerEvent(vm.$el, 'click')987      expect(spy.calls.count()).toBe(1)988      triggerEvent(vm.$el, 'click')989      expect(spy.calls.count()).toBe(1) // should no longer trigger990    })991  })...mouseMove.js
Source:mouseMove.js  
1import triggerEvent from './triggerEvent';2export function moveX(target, src, to, y = 25, noMouseUp = false) {3  const delta = src > to ? -1 : 1;4  triggerEvent(target, 'mousedown', {5    clientX: src,6    clientY: y,7    offset: {8      left: 1,9      top: 110    }11  });12  triggerEvent(target, 'mousemove', {13    clientX: src + delta,14    clientY: y15  });16  var dragging = document.querySelector('.ui-sortable-dragging');17  if (!dragging) {18    return;19  }20  triggerEvent(dragging, 'mousemove', {21    clientX: to,22    clientY: y23  });24  triggerEvent(dragging, 'mousemove', {25    clientX: to + delta,26    clientY: y27  });28  !noMouseUp && triggerEvent(target, 'mouseup', {29    clientX: to + delta,30    clientY: y31  });32}33export function moveY(target, src, to, x = 25, noMouseUp = false) {34  const delta = src > to ? -1 : 1;35  triggerEvent(target, 'mousedown', {36    clientX: x,37    clientY: src,38    offset: {39      left: 1,40      top: 141    }42  });43  triggerEvent(target, 'mousemove', {44    clientY: src + (-delta),45    clientX: x46  });47  triggerEvent(target, 'mousemove', {48    clientY: src + (-delta),49    clientX: x50  });51  var dragging = document.querySelector('.ui-sortable-dragging');52  if (!dragging) {53    return;54  }55  triggerEvent(dragging, 'mousemove', {56    clientX: x,57    clientY: to58  });59  triggerEvent(dragging, 'mousemove', {60    clientX: x,61    clientY: to + delta62  });63  !noMouseUp && triggerEvent(target, 'mouseup', {64    clientX: x,65    clientY: to + delta66  });...Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch({ headless: false });4  const context = await browser.newContext();5  const page = await context.newPage();6  await page.click('text="I agree"');7  await page.click('input[name="q"]');8  await page.keyboard.type('Playwright');9  await page.keyboard.press('Enter');10  await page.waitForSelector('text="Playwright - Google Search"');11  await page.click('text="Playwright - Google Search"');12  await page.waitForSelector('text="Playwright"');13  await page.click('text="Playwright"');14  await page.waitForSelector('text="Playwright"');15  await page.click('text="Playwright"');16  await page.waitForSelector('text="Playwright"');17  await page.click('text="Playwright"');18  await page.waitForSelector('text="Playwright"');19  await page.click('text="Playwright"');20  await page.waitForSelector('text="Playwright"');21  await page.click('text="Playwright"');22  await page.waitForSelector('text="Playwright"');23  await page.click('text="Playwright"');24  await page.waitForSelector('text="Playwright"');25  await page.click('text="Playwright"');26  await page.waitForSelector('text="Playwright"');27  await page.click('text="Playwright"');28  await page.waitForSelector('text="Playwright"');29  await page.click('text="Playwright"');30  await page.waitForSelector('text="Playwright"');31  await page.click('text="Playwright"');32  await page.waitForSelector('text="Playwright"');33  await page.click('text="Playwright"');34  await page.waitForSelector('text="Playwright"');35  await page.click('text="Playwright"');36  await page.screenshot({ path: `test.png` });37  await browser.close();38})();Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch();4  const page = await browser.newPage();5  await page.waitForSelector('text=Get started');6  const element = await page.$('text=Get started');7  await element.evaluate(element => element.dispatchEvent(new Event('hover', { bubbles: true })));8  await page.screenshot({ path: 'hover.png' });9  await browser.close();10})();11- [Playwright Internal API](Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3  const browser = await chromium.launch();4  const page = await browser.newPage();5  await page.waitForSelector('input[name="q"]');6  await page.fill('input[name="q"]', 'Playwright');7  await page.keyboard.press('Enter');8  await page.waitForSelector('text=Playwright');9  await page.click('text=Playwright');10  await page.waitForSelector('text=Playwright is a Node library to automate');11  await page.click('text=PlaUsing AI Code Generation
1const { chromium } = require('playwright');2const fs = require('fs');3(async () => {4  const browser = await chromium.launch({5  });6  const context = await browser.newContext();7  const page = await context.newPage();8  await page.fill('input[name="q"]', 'Playwright');9  await page.keyboard.press('Enter');10  await page.waitForSelector('text=Playwright is an open-source Node.js library to automate Chromium, Firefox and WebKit with a single API.');11  await page.click('text=Playwright is an open-source Node.js library to automate Chromium, Firefox and WebKit with a single API.');12  await page.waitForSelector('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API. Playwright is built to enable cross-browser web automation that is ever-green, capable, reliable and fast.');13  await page.click('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API. Playwright is built to enable cross-browser web automation that is ever-green, capable, reliable and fast.');14  await page.waitForSelector('text=Playwright is an open-source Node.js library to automate Chromium, Firefox and WebKit with a single API. Playwright is built to enable cross-browser web automation that is ever-green, capable, reliable and fast.');15  await page.click('text=Playwright is an open-source Node.js library to automate Chromium, Firefox and WebKit with a single API. Playwright is built to enable cross-browser web automation that is ever-green, capable, reliable and fast.');16  await page.waitForSelector('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API. Playwright is built to enable cross-browser web automation that is ever-green, capable, reliable and fast.');17  await page.click('text=Playwright is a Node library to automate Chromium, Firefox and WebKit with a single API. Playwright is built to enable cross-browser web automation that is ever-green, capable, reliable and fast.');18  await page.waitForSelector('text=Playwright is an open-source Node.js library to automate Chromium, Firefox and WebKit with a single API.');19  await page.click('text=Playwright is an open-source Node.js library to automate Chromium,Using AI Code Generation
1const { chromium, webkit, devices } = require('playwright');2const iPhone11 = devices['iPhone 11 Pro'];3(async () => {4  const browser = await chromium.launch({headless: false, slowMo: 500});5  const page = await browser.newPage();6  await page.click('text=Accept & continue');7  await page.click('input#sb_form_q');8  await page.type('input#sb_form_q', 'Playwright');9  await page.click('input#sb_form_go');10  await page.waitForSelector('text=Playwright');11  await page.click('text=Playwright');12  await page.waitForSelector('text=Playwright is a Node.js library to automate');13  await page.click('text=Playwright is a Node.js library to automate');14  await page.waitForSelector('text=Playwright is a Node.js library to automate');15  await page.click('text=Playwright is a Node.js library to automate');16  await page.waitForSelector('text=Playwright is a Node.js library to automate');17  await page.click('text=Playwright is a Node.js library to automate');18  await page.waitForSelector('text=Playwright is a Node.js library to automate');19  await page.click('text=Playwright is a Node.js library to automate');20  await page.waitForSelector('text=Playwright is a Node.js library to automate');21  await page.click('text=Playwright is a Node.js library to automate');22  await page.waitForSelector('text=Playwright is a Node.js library to automate');23  await page.click('text=Playwright is a Node.js library to automate');24  await page.waitForSelector('text=Playwright is a Node.js library to automate');25  await page.click('text=Playwright is a Node.js library to automate');26  await page.waitForSelector('text=Playwright is a Node.js library to automate');27  await page.click('text=Playwright is a Node.js library to automate');28  await page.waitForSelector('text=Playwright is a Node.js library to automate');29  await page.click('text=Playwright is a Node.js library to automate');30  await page.waitForSelector('text=Playwright is a Node.js library to automate');31  await page.click('text=Playwright is a Node.js library to automate');32  await browser.close();33})();Using AI Code Generation
1const { test, expect } = require('@playwright/test');2test('test', async ({ page }) => {3  await page.evaluate(() => {4    const event = new Event('keydown');5    event.key = 'Enter';6    document.querySelector('input[name="q"]').dispatchEvent(event);7  });8});LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
