iOS UI 自动化:处理两个 alertView,其中一个触发另一个
Posted
技术标签:
【中文标题】iOS UI 自动化:处理两个 alertView,其中一个触发另一个【英文标题】:iOS UI automation: Handling two alertViews, where one triggers another 【发布时间】:2013-06-17 22:17:40 【问题描述】:这就是我想要做的。
1) 我有一个 alertView 询问“你在哪里购物?”。此警报有两个按钮跳过/取消和继续。 2)通过单击跳过按钮,它会弹出另一个标题为“附近列表:”的警报视图,并显示附近商店的 tableView 列表,用户可以从中选择任何商店。这个只有一个取消按钮。 (取消按钮关闭警报并返回主页)
我的问题是每当我试图绕过默认处理程序时
UIATarget.onAlert = function onAlert(alert)
var title = alert.name();
UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
if (title == "Where are you shopping?")
alert.buttons()["Skip"].tap();
return true; // bypass default handler
return false;
这会点击跳过按钮,然后弹出第二个警报,并且在第二个警报上点击默认按钮,即使我没有为此编写任何代码。
我想点击第一个警报的跳过按钮,然后点击第二个警报的一个单元格。所以我尝试了下面的代码,但它仍然会在不点击单元格的情况下关闭第二个警报。不知道该怎么做。我是初学者,所以非常感谢任何帮助。
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
var testName = "Test 1";
UIALogger.logStart(testName);
var buttonScan = target.frontMostApp().windows()[0].buttons()["scan btn"];
//UIATarget.localTarget().pushTimeout(1);
target.delay(1);
//app.logElementTree();
if (buttonScan.isValid())
buttonScan.tap();
// first alert box "Where are you shopping"
UIATarget.onAlert = function onAlert(alert) // this is never called
var title = alert.name();
UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
if (title == "Where are you shopping?")
alert.buttons()["Skip"].tap();
return true; // bypass default handler
return false;
// second alert box "Nearby listings:"
UIATarget.onAlert = function onAlert(alert)
var title = alert.name();
UIALogger.logMessage( "Dismiss the keyboard" + title );
UIALogger.logWarning("Alert2 with title ’" + title + "’ encountered!");
if (title == "Nearby listings:")
return true; // bypass default handler
return false; // use default handler that is dismissing the alert
UIALogger.logPass(testName);
else
UIALogger.logFail(testName);
【问题讨论】:
您是否确认您的onAlert
处理程序正在被调用?引用 Apple 文档,如果未指定警报,或者处理程序返回 false,它会尝试单击 cancel
。在您的情况下,如果条件语句为真或假,您将单击取消。因此,请确保您实际上可以单击第一个警报上的 Continue
按钮。
@ekims 感谢您的回复。对我来说,预期的行为是,当我单击跳过(这是第一个警报的取消按钮)时,第二个警报应该在其中显示一个 tableView。现在在第二个警报中,我想选择一个单元格(产品列表),它将带我到另一个屏幕。
我只是建议您尝试单击第一个警报上的Continue
按钮,以确保您的警报处理程序在第一个场景中工作。因为如果没有指定警报处理程序,它默认为取消按钮。这将帮助我们缩小可能出现问题的范围。
@ekim 你是对的。谢谢你的建议。现在我知道它也不适用于第一个警报。你能告诉我第一个有什么问题吗?
无论点击哪个按钮(跳过或继续),都会出现第二个警报。我发现第一个警报在跟踪日志中不起作用,因为它没有显示 logWarning 消息。救命!!!
【参考方案1】:
在获取UITarget
的实例之前尝试设置onAlert
处理程序。
例如:
// first alert box "Where are you shopping"
UIATarget.onAlert = function onAlert(alert) // this is never called
var title = alert.name();
UIALogger.logWarning("Alert with title ’" + title + "’ encountered!");
if (title == "Where are you shopping?")
alert.buttons()["Skip"].tap();
return true; // bypass default handler
return false;
var target = UIATarget.localTarget();
var app = target.frontMostApp();
var window = app.mainWindow();
var testName = "Test 1";
UIALogger.logStart(testName);
var buttonScan = target.frontMostApp().windows()[0].buttons()["scan btn"];
//UIATarget.localTarget().pushTimeout(1);
target.delay(1);
//app.logElementTree();
if (buttonScan.isValid())
buttonScan.tap();
//alert should happen here
【讨论】:
嘿,它现在工作了(通过将 onAlert 移到顶部)。我在最后一次尝试中错过了一个报价。非常感谢这个人。你为我节省了更多时间的痛苦。对于我的下一个 UIAutomation 项目,我肯定希望与您联系。 没问题。我已经在一些工作项目中使用过它,并且很高兴在可能的情况下提供帮助。以上是关于iOS UI 自动化:处理两个 alertView,其中一个触发另一个的主要内容,如果未能解决你的问题,请参考以下文章