From d051717927b23f194cf600efab79d50ad25477fb Mon Sep 17 00:00:00 2001 From: Sai Krishna Date: Sat, 19 Mar 2022 08:45:56 +0530 Subject: [PATCH] #2508 fix click api to take co-ordinates as options (#2558) * Fix click API to take co-ordinates, added test and bump version for release Signed-off-by: saikrishna321 --- lib/actions/click.js | 1 + lib/data/devices.js | 48 +++++++++++++++++++++++++++++++++++ lib/eventBus.js | 2 +- package.json | 2 +- test/unit-tests/click.test.js | 12 ++++++++- 5 files changed, 62 insertions(+), 3 deletions(-) diff --git a/lib/actions/click.js b/lib/actions/click.js index 991fe5c3a..31dc85b62 100644 --- a/lib/actions/click.js +++ b/lib/actions/click.js @@ -72,6 +72,7 @@ async function click(selector, options = {}, ...args) { await simulateInputEvents(options); return 'Clicked ' + description(selector, true) + ' ' + options.noOfClicks + ' times'; } else { + (options.x = selector.x), (options.y = selector.y); await simulateInputEvents(options); return ( 'Clicked ' + diff --git a/lib/data/devices.js b/lib/data/devices.js index 2608bef51..33bbf8e33 100644 --- a/lib/data/devices.js +++ b/lib/data/devices.js @@ -523,6 +523,54 @@ let DEVICES = { isLandscape: true, }, }, + 'iPhone 11': { + userAgent: + 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1', + viewport: { + width: 414, + height: 896, + deviceScaleFactor: 2, + isMobile: true, + hasTouch: true, + isLandscape: false, + }, + }, + 'iPhone 11 landscape': { + userAgent: + 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1', + viewport: { + width: 896, + height: 414, + deviceScaleFactor: 2, + isMobile: true, + hasTouch: true, + isLandscape: true, + }, + }, + 'iPhone 11 Pro': { + userAgent: + 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1', + viewport: { + width: 375, + height: 812, + deviceScaleFactor: 3, + isMobile: true, + hasTouch: true, + isLandscape: false, + }, + }, + 'iPhone 11 Pro landscape': { + userAgent: + 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.0 Mobile/15E148 Safari/604.1', + viewport: { + width: 812, + height: 375, + deviceScaleFactor: 3, + isMobile: true, + hasTouch: true, + isLandscape: true, + }, + }, 'Kindle Fire HDX': { userAgent: 'Mozilla/5.0 (Linux; U; en-us; KFAPWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.13 Safari/535.19 Silk-Accelerated=true', diff --git a/lib/eventBus.js b/lib/eventBus.js index 0a7701baf..bd368a94b 100644 --- a/lib/eventBus.js +++ b/lib/eventBus.js @@ -23,7 +23,7 @@ descEvent.on('success', (desc) => { /*'createdSession' is a valid event that needs more than 10 listeners as all handlers have to listen to it */ -eventHandler.setMaxListeners(20); +eventHandler.setMaxListeners(100); module.exports = { eventHandler, diff --git a/package.json b/package.json index dc723a6d1..b36f649fd 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "http://json.schemastore.org/package", "name": "taiko", - "version": "1.3.1", + "version": "1.3.2", "description": "Taiko is a Node.js library for automating Chromium based browsers", "main": "bin/taiko.js", "bin": { diff --git a/test/unit-tests/click.test.js b/test/unit-tests/click.test.js index 43fba4163..5e413c8ba 100644 --- a/test/unit-tests/click.test.js +++ b/test/unit-tests/click.test.js @@ -13,6 +13,7 @@ let { setConfig, accept, alert, + evaluate, } = require('../../lib/taiko'); let { createHtml, removeFile, openBrowserArgs, resetConfig } = require('./test-util'); const test_name = 'Click'; @@ -23,7 +24,7 @@ describe(test_name, () => { let innerHtml = ` Click with proximity
- Click on text node + Click on text node Click with proximity
@@ -118,6 +119,15 @@ describe(test_name, () => { await click('on text'); expect(await text('Click works with text nodes.').exists()).to.be.true; }); + + it('element click with coordinates', async () => { + const { x, y } = await evaluate(() => { + const { x, y } = document.querySelector('#something').getBoundingClientRect(); + return { x, y }; + }); + await click({ x, y }); + expect(await text('Click works with text nodes.').exists()).to.be.true; + }); }); describe('element inside shadow dom', () => {