4

首先感谢您花时间阅读并希望对我的问题有所启发。目前,我只是在尝试自动登录和注销我公司使用 Instruments 制作的应用程序。我遇到了一些小问题(正如您在密码输入中看到的那样,由于一个奇怪的打字问题,我逐个字符滚动而不是使用字符串)。

问题是,当我在屏幕上弹出警报时,我希望点击注销按钮。但是,似乎我从未进入应该处理警报的块。我可以推断出这一点,因为我在 onAlert 块中乱扔了 logMessages,当运行测试脚本时,这些 logMessages 不会出现在我的日志中。我知道默认处理程序只会关闭任何警报,除非警报被明确处理。我也相信我正在或至少试图明确处理该警报,以便我可以点击正确的按钮。

我究竟做错了什么?我遵循了 Apple Instruments 指南,我相信我使用的语法与他们提供的示例完全相同。请在下面找到我的代码,我包含了所有代码,但感兴趣的部分在最后。

var target = UIATarget.localTarget();
var password = "something"

UIALogger.logStart("Test1");

target.frontMostApp().mainWindow().scrollViews()[0].webViews()[0].textFields()[0].tap();

target.frontMostApp().keyboard().typeString("something");

UIATarget.localTarget().delay(2);

target.frontMostApp().mainWindow().scrollViews()[0].webViews()[0].secureTextFields()[0].tap();

UIATarget.localTarget().delay(2);

for (i = 0; i < password.length; i++){

    var strChar = password.charAt(i);
    target.frontMostApp().keyboard().typeString(strChar);

}

target.frontMostApp().mainWindow().scrollViews()[0].webViews()[0].buttons()["Log in"].tap();

target.frontMostApp().mainWindow().tableViews()[0].cells()["Wipe data after 10 attempts"].staticTexts()["Wipe data after 10 attempts"].scrollToVisible();

target.frontMostApp().mainWindow().tableViews()[0].groups()["logout default"].buttons()["logout default"].tap();
// Alert detected. Expressions for handling alerts should be moved into the               UIATarget.onAlert function definition.

UIALogger.logMessage("Just before alert");

UIATarget.onAlert = function onAlert(alert){

    UIALogger.logMessage("In Alert!");

    UIATarget.delay(1);
    var title = alert.name();
    UIALogger.logMessage("Alert with title '" + title + "' encountered!");


    UIALogger.alert.logElementTree();
    alert.buttons()["Logout"].tap();


}
4

2 回答 2

3

我遇到了这个问题,最终发现在模拟器中显示 UI(在本例中为警报视图)之前,自动化代码正在进入下一行。为了缓解这种情况,我在 onAlert 块之前添加了一个延迟,以允许显示警报视图。

UIATarget.localTarget().delay(3)
UIATarget.onAlert = function onAlert(alert){
    var title = alert.name();
    UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
    target.frontMostApp().alert().cancelButton().tap();
    return false; // use default handler
}
于 2014-08-17T12:20:14.057 回答
2

你有几个错别字。

首先,您需要在执行测试代码之前定义警报处理函数。将其移至测试脚本的顶部。

其次,您对函数的定义和分配略有不正确。而不是这个:

UIATarget.onAlert = function onAlert(alert){

你应该有这个:

UIATarget.onAlert = function (alert){

最后,此警报处理程序仅适用于iOS 级别的警报,例如权限弹出窗口。我在这里进行猜测,但alert.buttons()["Logout"].tap();看起来像是您自己的应用程序正在创建的东西。您不需要警报处理程序;只需像任何其他 UI 元素一样在元素树中访问它,然后点击它。

于 2015-10-13T18:01:21.097 回答