Недавно я столкнулся с ситуацией, когда мне нужно было иметь возможность проверить текущее состояние включения / выключения (НЕ включено ли оно для взаимодействия с пользователем) UISwitch из существующего сегмента XCUITests, а не XCTest, и переключить его на заранее определенное состояние. Я добавил восстановление состояния приложения в старое существующее приложение, и это теперь мешает ряду существующих тестовых сценариев между запусками, которые ожидали переключателей UIS в определенных состояниях по умолчанию.

В отличие от XCTest, в XCUITest у вас нет прямого доступа к состоянию UISwitch.

Как это состояние определяется в Objective-C для XCUITest?

6
drshock 28 Май 2017 в 04:19

2 ответа

Лучший ответ

Не найдя ничего очевидного, я наткнулся на этот пост в блоге по поводу аналогичной ситуации для языка Swift. UITests Xcode: как проверить если переключатель UIS включен

С помощью этой информации я проверил и проверил два подхода к решению моей проблемы.

1) Утверждать, включено или выключено состояние

XCUIElement *mySwitch = app.switches[@"My Switch Storyboard Accessibility Label"];
// cast .value to (NSString *) and test for @"0" if off state 
XCTAssertEqualObjects((NSString *)mySwitch.value, @"0", @"Switch should be off by default.");  // use @"1" to test for on state

2) Чтобы проверить, включено или выключено состояние переключателя, переключите его состояние.

XCUIElement *mySwitch = app.switches[@"My Switch Storyboard Accessibility Label"];
// cast .value to (NSString *) and test for @"0" if off state 
if (![(NSString *)mySwitch.value isEqualToString:@"0"])
        [mySwitch tap];  // tap if off if it is on

Используя подход (2), я смог принудительно установить состояние по умолчанию для всех UIS-переключателей между запусками тестового набора и избежать помех восстановления состояния.

12
drshock 28 Май 2017 в 14:32

Версия Swift 5:

XCTAssert((activationSwitch.value as? String) == "1")

В качестве альтернативы вы можете иметь расширение XCUIElement

import XCTest

extension XCUIElement {
    var isOn: Bool? {
        return (self.value as? String).map { $0 == "1" }
    }
}

// ...

XCTAssert(activationSwitch.isOn == true)

4
AKM 6 Дек 2019 в 09:46