react-native-slider icon indicating copy to clipboard operation
react-native-slider copied to clipboard

[iOS] Slider doesn't trigger onValueChange/onSlidingComplete when adjusted with Detox adjustSliderToPosition()

Open MoOx opened this issue 3 years ago • 9 comments

Environment

❯ react-native info info Fetching system and libraries information... System: OS: macOS 12.1 CPU: (10) arm64 Apple M1 Pro Memory: 201.50 MB / 16.00 GB Shell: 5.8 - /bin/zsh Binaries: Node: 16.13.2 - /var/folders/51/8pncdp0x14d04bbk454szsnw0000gn/T/fnm_multishells/16782_1643016955991/bin/node Yarn: 1.22.5 - ~/.yarn/bin/yarn npm: 8.1.2 - /var/folders/51/8pncdp0x14d04bbk454szsnw0000gn/T/fnm_multishells/16782_1643016955991/bin/npm Watchman: 2022.01.03.00 - /opt/homebrew/bin/watchman Managers: CocoaPods: 1.11.2 - /Users/moox/.gem/bin/pod SDKs: iOS SDK: Platforms: DriverKit 21.2, iOS 15.2, macOS 12.1, tvOS 15.2, watchOS 8.3 Android SDK: Not Found IDEs: Android Studio: Not Found Xcode: 13.2.1/13C100 - /usr/bin/xcodebuild Languages: Java: 11.0.10 - /usr/bin/javac npmPackages: @react-native-community/cli: Not Found react: ^17.0.2 => 17.0.2 react-native: 0.67.0-rc.6 => 0.67.0-rc.6 react-native-macos: Not Found npmGlobalPackages: react-native: Not Found

Description

I am using detox to automated some tests and just faced the fact that using adjustSliderToPosition() API doesn't trigger onValueChange nor onSlidingComplete, so in my case it's like the slider hasn't been moved (it is, visually, but programmatically, no call have been made)

Reproducible Demo

I can't really do a quick demo :/

MoOx avatar Jan 24 '22 09:01 MoOx

Hello @MoOx! It's always good to specify the version you are using, so I can analyse this right away instead of bothering you with asking about it. Especially, there's been a 4.2.0 release just yesterday.

BartoszKlonowski avatar Jan 24 '22 10:01 BartoszKlonowski

I tried this version right now, I am facing the same problem.

MoOx avatar Jan 24 '22 10:01 MoOx

@MoOx Thanks! I will take a look into that.

BartoszKlonowski avatar Jan 24 '22 10:01 BartoszKlonowski

Thanks a lot!

MoOx avatar Jan 24 '22 10:01 MoOx

Just in case somebody is looking for a workaround: just use Detox swipe() method with the proper argument so it works for you (in my case a simple await element(by.id('GoalEdit_durationSlider')).swipe('right', 'slow', 0.3, 0); did the trick.

MoOx avatar Jan 24 '22 10:01 MoOx

@MoOx I am getting the same issue but above trick not working for me. Do you have any other solution? (I am guessing GoalEdit_durationSlider is you slider view testID)

Anyone else having any solution for this?

NitishSystango avatar Jun 22 '22 13:06 NitishSystango

I didn't look for any other solution since the previous one works for me perfectly.

MoOx avatar Jun 22 '22 13:06 MoOx

I'm seeing the same issue.

dmontag23 avatar Nov 25 '23 17:11 dmontag23

Try to use the longPressAndDrag, for example:

# sliderElem and targetElem could be the same element
const sliderElem = element(by.id('elementToDrag'))
const targetElem = element(by.id('targetElem'))
const duration = 2000
const endingPosition = 0.9 

await sliderElem.longPressAndDrag(duration, NaN, NaN, targetElem, endingPosition, NaN, 'slow', 0)

gliang-lyra avatar Mar 09 '24 01:03 gliang-lyra