Почему я не могу получить доступ к кнопке «Назад» в приложении iPhone с помощью сценария автоматизации пользовательского интерфейса? - PullRequest
4 голосов
/ 06 октября 2010

У меня есть простая функция, которая должна проверять, находится ли представление в домашнем интерфейсе, и если нет, перенести его в дом:

function returnHome() {
    if (UIATarget.localTarget().frontMostApp().navigationBar().name() == mainTitle) return true;

    // set tab bar to calculations
    UIALogger.logMessage("Set tab bar to main.");
    if (UIATarget.localTarget().frontMostApp().tabBar().selectedButton().name() != mainTabName) {
        UIATarget.localTarget().frontMostApp().tabBar().buttons()[mainTabName].tap();
    }

    // go back to the home
    UIALogger.logMessage("Go back to home.");
    var backButton = UIATarget.localTarget().frontMostApp().mainWindow().buttons()["Back"];
    if (backButton.isValid()) {
        backButton.tap();
    } else {
        UIALogger.logError("Could not find 'Back' button!");
    }
}

Теперь я не могу обойти ошибку «Не удалось найти кнопку« Назад »!». Он там, в левом углу, смотрит прямо на меня и дразнит меня!

UIATarget.localTarget().frontMostApp().logElementTree() дает мне следующее дерево:

2) UIAApplication [name:MyApplication value:(null) rect:{{x:0, y:20}, {width:320, height:460}}]
3) UIAWindow [name:(null) value:(null) rect:{{x:0, y:0}, {width:320, height:480}}]
4) UIAImage [name:(null) value:(null) rect:{{x:0, y:108}, {width:320, height:367}}]
4) UIANavigationBar [name:(null) value:(null) rect:{{x:0, y:64}, {width:320, height:44}}]
5) UIASegmentedControl [name:(null) value:(null) rect:{{x:5, y:71}, {width:310, height:30}}]
6) UIAButton [name:SementedControllerTagC, 3 of 3 value:(null) rect:{{x:212, y:71}, {width:103, height:30}}]
6) UIAButton [name:SementedControllerTagB, 2 of 3 value:(null) rect:{{x:109, y:71}, {width:102, height:30}}]
6) UIAButton [name:SementedControllerTagA, 1 of 3 value:1 rect:{{x:5, y:71}, {width:103, height:30}}]
4) UIATableView [name:Empty list value:rows 1 to 2 of 3 rect:{{x:15, y:169}, {width:290, height:247}}]
5) UIAButton [name:XYZ value:(null) rect:{{x:20, y:121}, {width:280, height:46}}]
5) UIATableGroup [name:SomeText value:(null) rect:{{x:15, y:169}, {width:290, height:50}}]
6) UIAStaticText [name:SomeText value:(null) rect:{{x:25, y:197}, {width:270, height:22}}]
5) UIATableCell [name:A value:(null) rect:{{x:15, y:219}, {width:290, height:50}}]
6) UIAElement [name:B value:(null) rect:{{x:15, y:219}, {width:247, height:50}}]
6) UIAButton [name:more info, A value:(null) rect:{{x:262, y:219}, {width:43, height:50}}]
5) UIATableCell [name:X value:(null) rect:{{x:15, y:269}, {width:290, height:50}}]
6) UIAElement [name:Y value:(null) rect:{{x:15, y:269}, {width:247, height:50}}]
6) UIAButton [name:more info, B value:(null) rect:{{x:262, y:269}, {width:43, height:50}}]
4) UIAButton [name:(null) value:(null) rect:{{x:85, y:339}, {width:150, height:32}}]
4) UIAImage [name:(null) value:(null) rect:{{x:0, y:334}, {width:320, height:97}}]
4) UIAStaticText [name:SomeText value:(null) rect:{{x:45, y:377}, {width:189, height:21}}]
4) UIAStaticText [name:SomeText value:(null) rect:{{x:45, y:406}, {width:230, height:21}}]
4) UIAStaticText [name:SomeText value:(null) rect:{{x:234, y:377}, {width:41, height:21}}]
4) UIAStaticText [name:(null) value:(null) rect:{{x:0, y:0}, {width:0, height:21}}]
4) UIAStaticText [name:(null) value:(null) rect:{{x:45, y:377}, {width:230, height:21}}]
4) UIAStaticText [name:(null) value:(null) rect:{{x:45, y:406}, {width:230, height:21}}]
4) UIANavigationBar [name:mainNavigationBar value:(null) rect:{{x:0, y:20}, {width:320, height:44}}]
5) UIAStaticText [name:mainNavigationBar value:(null) rect:{{x:108, y:28}, {width:105, height:27}}]
5) UIAButton [name:Back value:(null) rect:{{x:5, y:27}, {width:49, height:30}}]
4) UIATabBar [name:(null) value:(null) rect:{{x:0, y:431}, {width:320, height:49}}]
5) UIAButton [name:tab1 value:1 rect:{{x:2, y:432}, {width:103, height:48}}]
5) UIAButton [name:tab2 value:(null) rect:{{x:109, y:432}, {width:102, height:48}}]
5) UIAButton [name:tab3 value:(null) rect:{{x:215, y:432}, {width:103, height:48}}]

В журнале отчетливо видна кнопка «Назад», но я не могу найти для нее нужную ссылку. Кто-нибудь может указать мне правильное направление здесь? Я делаю что-то неправильно? К вашему сведению, я пытался получить доступ к кнопкам () из frontMostApp (), mainWindow () и navigationBar (). Все не удалось.

Ответы [ 3 ]

8 голосов
/ 06 октября 2010

Кнопка «Назад» - это не прямой дочерний элемент окна, а панель навигации.Попробуйте получить к нему доступ с помощью следующего кода:

   var backButton = UIATarget.localTarget().frontMostApp().mainWindow().navigationBar().buttons()["Back"]; 
4 голосов
/ 06 октября 2010

Как вы строите иерархию представлений?Судя по журналу, у вас есть две панели навигации под одним UIWindow: одна немаркированная, а другая помечена mainNavigationBar.

Как отмечает Клаус, вы сможете получить доступ к кнопке «Назад»доступ к панели навигации главного окна, но в вашем случае это может быть неудачно из-за наличия этой второй панели навигации.

В случае, если это помогает, ниже приведен сценарий, который я написал и который проходит через каждый раздел впример приложения UICatalog, делает снимок экрана этого раздела, а затем возвращается на главный уровень контроллера навигации.В этом примере я использую leftButton() для доступа к кнопке «Назад» на панели навигации.

var target = UIATarget.localTarget();
var application = target.frontMostApp(); 
var mainWindow = application.mainWindow();
var tableView = mainWindow.tableViews()[0];


UIALogger.logMessage("Number of cells " + tableView.cells().length);

for (var currentCellIndex = 0; currentCellIndex < tableView.cells().length; currentCellIndex++)
{
    var currentCell = tableView.cells()[currentCellIndex];
    UIALogger.logStart("Testing table option " + currentCell.name());

    currentCell.scrollToVisible();  

    target.delay(1);
    currentCell.tap();  // Go down a level
    target.delay(1);

    UIATarget.localTarget().captureScreenWithName(currentCell.name());
    mainWindow.navigationBar().leftButton().tap(); // Go back
    target.delay(1);
    UIALogger.logPass("Testing table option " + currentCell.name());
}
1 голос
/ 04 марта 2011

Может быть, это на самом деле не кнопка.Я столкнулся с подобной проблемой, журнал вернул его как кнопку, но на самом деле это View.Поэтому мое решение - найти элемент (может быть изображение), а затем получить прямоугольник (x, y), а затем вкладку на экране с определенным местоположением, например target.tapWithOptions ({x: 5, y: 190});Надеюсь, это поможет, ура

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...