UI Test for an ios-app, developed in XCode 8 and swift 3.2.
Facing problem to deal with ScrollViews, collectionViews after upgrade XCode to 9
I can tap and access the Buttons, StaticTexts, TextFields elements. But I can not tap or access the collectionviews, scrollviews, tableviews elements on XCode9 and Swift 3.2.
Suppose in the previous XCode version (i.e, XCode 8.3) I used the code app.collectionViews.collectionViews.cells.images.element(boundBy: 0).tap()
to tap on Home page(collectionViews). But this code is not working in XCode 9.
I tried to get the exact element using uitest recording feature. By using recording I got the code -
app.collectionViews.otherElements.containing(.textField, identifier:"StoryboardTitleTextField").children(matching: .collectionView).element.tap().
But this code isn't working too. So how can I resolve this?
Thanks
Recently i also faced the similar type of issue after upgrading my project(Swift 3.2) into XCode 9.
The issue is
app.collectionViews.collectionViews.cells.images.element(boundBy: 0).isHittable is returning false.
Thats why default tap() method is not working for hierarchical elements.
I just did the below procedure and that worked fine.
Step 1: Create an extension like below
extension XCUIElement {
func tryClick() {
if self.isHittable {
self.tap()
}
else {
let coordinate: XCUICoordinate = self.coordinate(withNormalizedOffset: CGVector(dx:0.5, dy:0.5))
coordinate.doubleTap()
//coordinate.press(forDuration: 0.5)
}
}
}
Step 2: click on the element using the instance method created above instead of using direct tap() method.
app.collectionViews.collectionViews.cells.images.element(boundBy: 0).tryClick()
Note: try using
CGVector(dx:0.5, dy:0.5) or CGVector(dx:0.0, dy:0.0)
Hope it will solve your issue. It worked like a charm for me.