V.OrtegAg
V.OrtegAg

Reputation: 21

Uitest refresh control swift

I am trying to add uitest for refresh control but I could not have done it because of I can't get access to refresh control with accessibility identifier (refreshControl.accessibilityIdentifier = "refreshControlList")

launchAppWithArgs(json: OrdersResultJSON.ok, xcuiApp: app)

        let table = app.tables["agendaTable"]

        DispatchQueue.main.async {
            table.otherElements["sectionHeader0"].press(forDuration: 2, thenDragTo: table.otherElements["sectionHeader2"])
        }

        if !table.otherElements[""].waitForExistence(timeout: 6) {
            print("XXX")
        }

Any suggestion to test it?

Upvotes: 2

Views: 1228

Answers (2)

Rafael Schmitt
Rafael Schmitt

Reputation: 21

You could grab the UIRefreshControl's title label and put an identifier on it, like this:

func setSubviewAccessibility(for tableView: UITableView) {
            guard let titleLabel = tableView.refreshControl?.subviews.first?.subviews.last as? UILabel else {
                return
            }
            titleLabel.isAccessibilityElement = true
            titleLabel.accessibilityIdentifier = "refresh_control_label"
        }

Call this method passing the table view that you've set the UIRefreshControl for and you should be good to go.

Then, on the test side:

let refreshControl = XCUIApplication().staticTexts["refresh_control_label"]

            guard refreshControl.waitForExistence(timeout: 5) else {
                return XCTFail("Refresh control label not found.")
            }

The only problem remaining is you'll probably need the list loading to take a little longer than a second so that your tests don't miss the UIRefreshControl. It's always good to use waitForExistence.

Upvotes: -1

ErikBrandsma
ErikBrandsma

Reputation: 1719

To perform a pull to refresh, simply get the first cell and drag it down:

let firstCell = app.tables["agendaTable"].cells.firstMatch
let start = firstCell.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 0))
let finish = firstCell.coordinate(withNormalizedOffset: CGVector(dx: 0, dy: 10))
start.press(forDuration: 0, thenDragTo: finish)

Hope this helps!

Upvotes: 2

Related Questions