Почему инструмент автоматизации пользовательского интерфейса не может определить, включена ли здесь кнопка? - PullRequest
0 голосов
/ 01 апреля 2011

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

На данный момент я пытаюсь определить, включена ли кнопка в моем главном окне (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.");  
}

Ответы [ 4 ]

2 голосов
/ 05 апреля 2011

Эй.
Я согласен с Сосулливаном.Там может быть проблема с доступом к кнопке в целом.Кроме того, если 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 проверит, была ли кнопка найдена в древовидной структуре (в основном приложении).Если это не решает проблему, проверьте, где в древовидной структуре находится кнопка, а затем поставьте правильную проверку местоположения в качестве предварительного условия проверки, включена ли она.

0 голосов
/ 22 октября 2013

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

if (mainWindow.buttons()["Sign In"].isVisible())  
    UIALogger.logPass("Try: " + title + " has passed."); 
0 голосов
/ 22 апреля 2011

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

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

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

Вы должны иметь другую структуру или даже лучше - сначала проверьте, существует ли вообще объект, к которому вы обращаетесь, в текущем окне, как показано в ответе yoosiba .

0 голосов
/ 05 апреля 2011

Хмм.Хорошо ....

Мы работаем с использованием инфраструктуры с открытым исходным кодом 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».

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

SteveO

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