Тест на потребителския интерфейс - Системно предупреждение в пейзажен режим

Работя върху тестване на потребителския интерфейс за няколко последователни системни предупреждения (т.е. видео приложение за получаване на разрешение за камера, микрофон и снимки). С примерен проект изглежда, че новият метод addUIInterruptionMonitorWithDescription не работи за пейзажен режим.

Попаднах на тази публикация Тест на Swift UI - предупреждение за системата за известия за потребители, но при мен случаят е друг.

Моят код изглежда така:

    let desc = "\u{201c}Alert\u{201d} Would Like to Access the Camera"

    let app = XCUIApplication()

    addUIInterruptionMonitorWithDescription(desc) { (alert) -> Bool in
        let okButton = alert.buttons["OK"]
        print(okButton.frame)
        okButton.tap()
        return true
    }
    app.buttons["Alert"].tap()

Работи за портрет, не за пейзаж. Случаят може да бъде възпроизведен от симулатор и устройство.

Освен това okButton.frame, който получих в Портрет, е

 CGRect
  ▿ origin : CGPoint
    - x : 207.0
    - y : 387.666666666667
  ▿ size : CGSize
    - width : 135.0
    - height : 44.0

но рамката в Landscape показва така

Пейзажно системно предупреждение

 CGRect
  ▿ origin : CGPoint
    - x : 143.333333333333
    - y : 368.0
  ▿ size : CGSize
    - width : 44.0
    - height : 135.0

Грешката при неуспешен тест, която получих, е тази

неуспешен тест: -[AlertUITests testExample()] неуспешен: Неуспешно тестване на потребителския интерфейс - Неуспешно превъртане до видим (чрез действие на AX) Бутон 0x14df73840: черти: 8589934593, {{277.0, 345.0}, {46.0, 30.0}}, етикет: ' Button', грешка: Грешка -25204 при изпълнение на AXAction 2003

Някаква идея?

РЕДАКТИРАНЕ 1

Изпратено на Radar rdar://23931990


person Harry Ng    schedule 17.12.2015    source източник
comment
Това е точният проблем на въпроса, който споменавате. Вижте редакциите на питащия, те споменават, че приложението също е в пейзажен режим.   -  person Joe Masilotti    schedule 17.12.2015
comment
@JoeMasilotti Забелязах редакцията. Това обаче е друг проблем. Както бе споменато от питащия, приложението му докосва бутона Dont Allow, докато в моя случай показва грешка с действие AX.   -  person Harry Ng    schedule 17.12.2015
comment
Звучи като че ли има бъг с ландшафтни системни предупреждения, нали? Мисля, че радиолокаторът е всичко, което можем да направим тук.   -  person Joe Masilotti    schedule 17.12.2015


Отговори (1)


Това е грешка в рамката.

Опитайте да използвате нещо подобно:

Помощници:

var device: XCUIDevice {return XCUIDevice.shared()}

extension XCUIDevice {

    func type() -> String {

        if XCUIApplication().windows.element(boundBy: 0).horizontalSizeClass == .compact || XCUIApplication().windows.element(boundBy: 0).verticalSizeClass == .compact {

            return "iPhone"

        } else {

            return "iPad"
        }
    }
}

Метод:

func handleOrientation(_ orientationAltered: Bool) -> Bool {

        guard device.type() == "iPad" else {return false}

        if !orientationAltered && device.orientation == .landscapeLeft {

            device.orientation = .portrait
            return true

        } else if orientationAltered && (device.orientation == .landscapeLeft || device.orientation == .landscapeRight) {

            device.orientation = .landscapeLeft
            return false

        } else {return false}
    }
person Oxi Ros    schedule 09.01.2018