Abd*_*tou 3 ios xcode-ui-testing
我有一个应用程序,其中使用页面控件来指示多个屏幕。当用户点击页面控件时(例如:在当前所选页面的右侧),滚动视图将滚动到以下屏幕。工作正常。
我想为这种情况编写一个UI测试。我发现我无法点击特定的页面控件“点”来触发该操作。我可以检查的是页面控件是否存在以及当前所选页面。
另一个问题是,即使我能够这样做,如何检查滚动视图是否已经滚动?我只能访问滚动视图的框架,而不能访问其边界。
我刚刚开始使用Xcode UITest,这让我失望了。我认为它现在将很强大(它是Xcode 7引入的,并且以前作为UI Automation可用),但是似乎还没有。
我将回到单元测试+手动功能测试。如果有人有其他想法,请分享。
不要这么快就放弃,Xcode UITest有时可能会令人沮丧,但是一旦您确定了要使用的技巧,它们就会非常强大:
您可以像这样测试UIPageControl:
func testPageIndicator() {
let app = XCUIApplication()
app.launch()
let scrollView = app.scrollViews.element(boundBy: 0)
let pageIndicator = app.pageIndicators.element(boundBy: 0)
// test that page indicator is updated when user scrolls to page 2
scrollView.swipeLeft()
XCTAssertEqual(pageIndicator.value as? String, "page 2 of 3")
// test that scrollview scrolls to page 3 when user taps right of the current page in page indicator
pageIndicator.coordinate(withNormalizedOffset: CGVector(dx: 0.9, dy: 0.2)).tap()
XCTAssert(app.otherElements["page_3"].waitForExistence(timeout: 2))
XCTAssertFalse(app.otherElements["page_2"].exists)
XCTAssertEqual(pageIndicator.value as? String, "page 3 of 3")
}
Run Code Online (Sandbox Code Playgroud)
您可以使用coordinate方法告诉测试在UIElement上点击的位置。您将CGVector对象传递给描述点击位置的方法。
例如,a CGVector(dx: 0.9, dy: 0.2)告诉测试在元素的宽度为90%且高度为20%的位置上敲击元素。
您可以使用它在UIPageIndicator(在上面的代码示例中)点击当前页面右侧的左侧。
要测试您是否在UIScrollView中的正确页面上,可以将每个页面accessibilityIdentifier设置为唯一的字符串,然后在点击页面控件后断言具有该标识符的UIElement存在。
在我的情况下,页面是3个UIView。我将它们设置accessibilityIdentifier为“ page_1”,“ page_2”和“ page_3”,然后断言“ page_3”存在而“ page_2”不存在。
| 归档时间: |
|
| 查看次数: |
892 次 |
| 最近记录: |