Почему инструмент автоматизации пользовательского интерфейса не может определить, включена ли здесь кнопка?

Я работаю с Xcode 4.0.1 и инструментами, пытаясь реализовать некоторые тесты UIAutomation.

На данный момент я пытаюсь определить, включена ли кнопка в моем MainWindow (mainWindow = app.mainWindow();).

Это приложение работает на iPad II, и прямо сейчас я не чувствую любви.

Кто-нибудь может помочь?

Вот синтаксис, который я пытаюсь использовать; это кажется правильным?

var title="Checking that Sign-In button is disabled";  
try {  
    if (mainWindow.buttons()["Sign In"].isEnabled())  
    UIALogger.logPass("Try: " + title + " has passed.");  
}  
catch (error) {  
    UIALogger.logError(error);  
    target.logElementTree();  
    UIALogger.logFail("Try: " + title + " has failed.");  
}

person Sosullivan    schedule 31.03.2011    source источник
comment
Вы должны определить, в чем именно заключается ваша проблема! Кнопка вообще доступна? Правилен ли путь к кнопке (попробуйте .tap() или выполните .logElementTree() в mainWindow). На этот вопрос нельзя ответить, если мы не знаем, как устроен ваш интерфейс... Ваш синтаксис кажется правильным, поэтому, должно быть, проблема связана с доступностью кнопки. Кроме того, попробуйте интерпретировать сообщения об ошибках Инструмента при выполнении скрипта!   -  person Rene Berlin    schedule 04.04.2011


Ответы (4)


Привет.
Я согласен с Сосалливаном. Может быть проблема с доступом к кнопкам вообще. Кроме того, если mainWindow.buttons() не содержит один с именем «Войти», не выполняется ли весь код без какого-либо вывода? Я хотел бы убедиться, что эта кнопка находится в дереве объектов, проверить ее положение (чтобы я мог получить к ней доступ), а затем вызвать .isEnabled(), чтобы узнать, включена ли она для пользователя.
возможно, попробуйте этот код для запуска:

var title="Checking that Sign-In button is disabled";  
try {
  if (mainWindow.buttons()["Sign In"] && mainWindow.buttons()["Sign In"].isEnabled())  {
      UIALogger.logPass("Try: " + title + " has passed.");  
  } else {
      throw new Error("no SignIn button or button not enabled");
    }
} catch (error) {  
  UIALogger.logError(error);  
  target.logElementTree();  
  UIALogger.logFail("Try: " + title + " has failed.");  
}

Первая проверка в if проверит, была ли кнопка найдена в древовидной структуре (под основным приложением). Если это не решает проблему, проверьте, где в вашей древовидной структуре находится кнопка, затем установите правильную проверку местоположения в качестве предварительного условия для проверки того, включена ли она.

person yoosiba    schedule 05.04.2011

В вашем коде, если кнопка отключена, следующее выражение будет False

mainWindow.buttons()["Sign In"].isEnabled()

и в вашем коде нет оператора else для этого, и ошибка также не будет выдана.

У вас должна быть структура else или, что еще лучше, сначала проверьте, существует ли вообще объект, к которому вы обращаетесь, в вашем текущем окне, как показано в ответе yoosiba< /а>.

person jki    schedule 22.04.2011

В этом случае вы должны использовать метод .isVisible, так как вы хотите проверить, существует ли объект или нет.

if (mainWindow.buttons()["Sign In"].isVisible())  
    UIALogger.logPass("Try: " + title + " has passed."); 
person realheaven    schedule 22.10.2013

Хрм. В порядке....

Мы работаем с использованием фреймворка с открытым исходным кодом UIAutomation под названием «alexvollmer-tuneup_js», взятого из SourceForge. Он находится в свободном доступе, и его модификации приветствуются (и автор просит, чтобы вы разветвляли свои версии его кода, чтобы поделиться с другими).

У него есть файл с именем assertions.js, для которого у него есть две функции assertTrue() и assertFalse().

Я использую их в другом файле, который он включает, под названием «uiautomation-ext.js», который импортируется в мои тестовые файлы. В uiautomation-ext.js я добавил две функции:

/**
* Asserts that the given button is disabled.
*/
buttonIsDisabled: function(buttonName) {
        assertFalse(UIATarget.localTarget().frontMostApp().mainWindow().buttons()[buttonName].isEnabled(), "The button: " + buttonName + " is disabled.");
},

/**
* Asserts that the given button is ENABLED.
*/
buttonIsEnabled: function(buttonName) {
        assertTrue(UIATarget.localTarget().frontMostApp().mainWindow().buttons()[buttonName].isEnabled(), "The button: " + buttonName + " is enabled.");
}

Эти две функции помещены в объект JDOS в файле uiautomation-ext.js с именем «extend(UIAWindow.prototype»).

Я не совсем уверен, что передал то, что я/мы сделали, настолько ясно, насколько мне хотелось бы, но я сделал все, что мог. Всем удачи!

СтивО

person Community    schedule 04.04.2011