Skip to content

feat: add pinch and zoom#13914

Merged
christian-bromann merged 4 commits intomainfrom
ws/add-pinch-zoom
Nov 26, 2024
Merged

feat: add pinch and zoom#13914
christian-bromann merged 4 commits intomainfrom
ws/add-pinch-zoom

Conversation

@wswebcreation
Copy link
Member

@wswebcreation wswebcreation commented Nov 24, 2024

This PR adds the element commands pinch and zoom for mobile

Usage

// Pinch
const mapsElement = $('//*[@resource-id="com.google.android.apps.maps:id/map_frame"]')
// Pinch with the default duration scale
await mapsElement.pinch()
// Pinch with a custom duration and scale
await mapsElement.pinch({ duration: 4000, scale: 0.9 })

// Zoom
const mapsElement = $('//*[@resource-id="com.google.android.apps.maps:id/map_frame"]')
// Zoom with the default duration scale
await mapsElement.zoom()
// Zoom with a custom duration and scale
await mapsElement.zoom({ duration: 4000, scale: 0.9 })
})

Note

There are more ways to implement pinch and zoom (for example with the actions-api, but this is the most efficient and fastest one with the least amount of WebDriver calls which would be "faster" on Cloud Vendors

Proposed changes

Types of changes

  • Polish (an improvement for an existing feature)
  • Bugfix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Documentation update (improvements to the project's docs)
  • Specification changes (updates to WebDriver command specifications)
  • Internal updates (everything related to internal scripts, governance documentation and CI files)

Checklist

  • I have read the CONTRIBUTING doc
  • I have added tests that prove my fix is effective or that my feature works
  • I have added the necessary documentation (if appropriate)
  • I have added proper type definitions for new commands (if appropriate)

Backport Request

//: # (The current main branch is the development branch for WebdriverIO v9. If your change should be released to the current major version of WebdriverIO (v8), please raise another PR with the same changes against the v8 branch.)

  • This change is solely for v9 and doesn't need to be back-ported
  • Back-ported PR at #XXXXX

Further comments

Reviewers: @webdriverio/project-committers

@wswebcreation wswebcreation added the PR: New Feature 🚀 PRs that contain new features label Nov 24, 2024
@erwinheitzman
Copy link
Member

@wswebcreation how do these commands relate to the actual user actions when combined with the scale? I currently cannot create a clear picture of how pinching uses a scale

@pkg-pr-new
Copy link

pkg-pr-new bot commented Nov 24, 2024

Open in Stackblitz

eslint-plugin-wdio

npm i https://pkg.pr.new/webdriverio/webdriverio/eslint-plugin-wdio@13914

@wdio/allure-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/allure-reporter@13914

@wdio/browser-runner

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/browser-runner@13914

@wdio/appium-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/appium-service@13914

@wdio/browserstack-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/browserstack-service@13914

@wdio/cli

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/cli@13914

@wdio/concise-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/concise-reporter@13914

@wdio/config

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/config@13914

@wdio/cucumber-framework

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/cucumber-framework@13914

@wdio/dot-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/dot-reporter@13914

@wdio/firefox-profile-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/firefox-profile-service@13914

@wdio/globals

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/globals@13914

@wdio/jasmine-framework

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/jasmine-framework@13914

@wdio/json-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/json-reporter@13914

@wdio/junit-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/junit-reporter@13914

@wdio/lighthouse-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/lighthouse-service@13914

@wdio/local-runner

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/local-runner@13914

@wdio/logger

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/logger@13914

@wdio/mocha-framework

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/mocha-framework@13914

@wdio/protocols

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/protocols@13914

@wdio/repl

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/repl@13914

@wdio/reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/reporter@13914

@wdio/runner

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/runner@13914

@wdio/sauce-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/sauce-service@13914

@wdio/shared-store-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/shared-store-service@13914

@wdio/smoke-test-cjs-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/smoke-test-cjs-service@13914

@wdio/smoke-test-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/smoke-test-reporter@13914

@wdio/smoke-test-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/smoke-test-service@13914

@wdio/spec-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/spec-reporter@13914

@wdio/static-server-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/static-server-service@13914

@wdio/sumologic-reporter

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/sumologic-reporter@13914

@wdio/testingbot-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/testingbot-service@13914

@wdio/types

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/types@13914

@wdio/utils

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/utils@13914

@wdio/webdriver-mock-service

npm i https://pkg.pr.new/webdriverio/webdriverio/@wdio/webdriver-mock-service@13914

webdriver

npm i https://pkg.pr.new/webdriverio/webdriverio/webdriver@13914

webdriverio

npm i https://pkg.pr.new/webdriverio/webdriverio@13914

commit: 0d6ad16

@wswebcreation
Copy link
Member Author

@wswebcreation how do these commands relate to the actual user actions when combined with the scale? I currently cannot create a clear picture of how pinching uses a scale

Great question, when you pinch/zoom, you want to make it "x"% smaller or bigger than shown on your screen. So when you say it needs to be a scale of 80% smaller then we (the driver) uses the "screen-size" and scale to determine how much it needs to move the fingers to each other. This gesture will never be "100%" accurate all the time you execute it and differs how much is pinches/zooms per device/screen

Copy link
Member

@christian-bromann christian-bromann left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Awesomeness 😋

@christian-bromann christian-bromann merged commit 6e2650c into main Nov 26, 2024
@christian-bromann christian-bromann deleted the ws/add-pinch-zoom branch November 26, 2024 06:45
@aleks-temp
Copy link

@christian-bromann , are you planning to release this in v8 too?

@christian-bromann
Copy link
Member

are you planning to release this in v8 too?

No, we recommend to update WebdriverIO to v9 as we unfortunately don't have the resources to backport every feature.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

PR: New Feature 🚀 PRs that contain new features

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants