swift Xcode UITesting -如何移动UISlider?

0g0grzrc  于 2023-05-16  发布在  Swift
关注(0)|答案(5)|浏览(131)

有没有办法在Xcode中将UISlider移动到UITests目标下?我真的需要把它从代码中移出来。这可能吗?

5cg8jx4n

5cg8jx4n1#

1.获取您的滑块:

let app = XCUIApplication()
let timeSlider = app.sliders["timeSlider"]

1.调整其值:

timeSlider.adjustToNormalizedSliderPosition(0.9)
dgiusagp

dgiusagp2#

我基于this answer做了这个扩展来修复adjustToNormalizedSliderPosition问题。

import XCTest

extension XCUIElement {

    open func adjust(toNormalizedSliderValue normalizedSliderValue: CGFloat) {
        let start = coordinate(withNormalizedOffset: CGVector(dx: 0.0, dy: 0.0))
        let end = coordinate(withNormalizedOffset: CGVector(dx: normalizedSliderValue, dy: 0.0))
        start.press(forDuration: 0.05, thenDragTo: end)
    }

}

你只需要打电话:

app.sliders["Your Slider Identifier"].adjust(toNormalizedSliderValue: 0.5)

在这里,你可以找到一些其他有用的Xcode UITesting技巧:
https://github.com/joemasilotti/UI-Testing-Cheat-Sheet

nszi6y05

nszi6y053#

我无法让adjustToNormalizedSliderPosition与我的应用程序的滑块一起工作。我看到一些人在网上发帖说这对他们也不起作用。在这里为别人工作?
调整滑块的一种不太有用的方法是找到元素,按住一段时间,然后拖动到另一个元素:

slider.pressForDuration(duration: 0.05, thenDragToElement: anotherElement)
h79rfbju

h79rfbju4#

Swift 4.2+

@bartłomiej-semańczyk的回答,修改了一点像这样:
1.获取您的滑块:

let app = XCUIApplication()
    let timeSlider = app.sliders["timeSlider"]

1.调整其值:

timeSlider.adjust(toNormalizedSliderPosition: 0.9)

**注:**数字为CGFloat,介于0和1之间。如果你的UISlider最小值和最大值不是0到1,你必须先像这样转换它:

let numberBetween01 = CGFloat((requestedVal - UISlider.minimumValue ) / UISlider.maximumValue - UISlider.minimumValue))
uemypmqf

uemypmqf5#

如何将UISlider移动到右侧️

static func moveSliderToRight(element: XCUIElement){
  _ =  element.waitForExistence(timeout: 10)
    element.adjust(toNormalizedSliderPosition: 1)
}

如何将UISlider移动到左侧️

static func moveSliderToRight(element: XCUIElement){
  _ =  element.waitForExistence(timeout: 10)
    element.adjust(toNormalizedSliderPosition: 0)
}

相关问题