uiautomator 怎么获取按钮状态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uiautomator 怎么获取按钮状态相关的知识,希望对你有一定的参考价值。
参考技术A Uiautomator 没办法获取到相应apk的上下文的。~如果你认可我的回答,请及时点击【采纳为满意回答】按钮 ~~手机提问的朋友在客户端右上角评价点【满意】即可。 ~你的采纳是我前进的动力 ~~O(∩_∩)O,记得好评和采纳,互相帮助,谢谢。本回答被提问者采纳在 Xcode UIAutomation 和 Instruments 中使用 Javascript 验证按钮对象的存在
【中文标题】在 Xcode UIAutomation 和 Instruments 中使用 Javascript 验证按钮对象的存在【英文标题】:Verifying the existence of a button object using Javascript, in Xcode UIAutomation and Instruments 【发布时间】:2011-03-01 23:02:35 【问题描述】:为了在 iOS 4.2 上对我们的项目进行质量测试,我们正在通过 Xcode 3.x 中的 Instruments 使用 UIAutomation。我们正在用 Javascript 编写脚本。我是 Javascript 新手,发现 UIAutomation 文档是(我应该怎么写?)“稀疏”。
我希望以太坊中的某个天才能够启发我如何验证在我们的 iOS 应用程序的主窗口上显示名为“哔声”的按钮是否存在?
还有没有人找到任何用 JavaScript 编写测试脚本(相对于动态网页)的好的参考资料?
感谢您的所有帮助!
问候,
史蒂夫·奥沙利文
【问题讨论】:
【参考方案1】:嘿。 实际上,来自苹果的文档(this 和 this)是我唯一能找到的。 至于你的问题试试
if(UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0].name() === "beep sound"))
UIALogger.logPass("Buton Present");
else
UIALogger.logFail("Buton Not Present");
;
当然,这假设 (elements()[0]) 您的按钮位于主窗口下的对象树中的第一个。如果不是,您可能需要调用其他元素 ((elements()3),或者您可能需要更深入地调用层次结构 (elements()[0].elements ()3)。 请记住,如果链中的对象之一不存在,上面的代码将失败。您可能需要检查链中的每个对象。此外,您可能需要检查给定按钮是否不仅存在,而且是否在屏幕上可见。在这种情况下,上面的代码可能需要如下所示:
if(UAITarget.localTarget().frontMostApplication().mainWindow() && UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0] && UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0].withPredicate("name matches 'beep sound'"))
if(UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0].isVisible())
UIALogger.logPass("Buton Present");
else
UIALogger.logFail("Buton Present, but Not Visible");
else
UIALogger.logFail("Buton Not Present");
;
但现在代码的可读性、可维护性和过度属性受到影响。所以我会将它重构为:
function isButtonWithPredicate (predicate)
if(UAITarget.localTarget().frontMostApplication().mainWindow() && UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0] && UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0].withPredicate(predicate))
return true;
else
throw new Error("button not found, predicate: " + predicate);
function getButtonWithPredicate (predicate)
try
if(isButtonWithPredicate(predicate))
return UAITarget.localTarget().frontMostApplication().mainWindow().elements()[0].withPredicate(predicate);
catch (error)
throw new Error("getButtonWithPredicateError: " + error.message);
;
var strpredicate = "name matches 'beep sound'";
var objButton = null;
try
objButton = getButtonWithPredicate(strPredicate);
if(objButton.isVisible)
UIALogger.logPass("Buton Present");
;
catch(error)
UIALogger.logFail(error.message);
当然你仍然可以改进它……但你应该明白这一点。
顺便说一句apple guide to predicates
附注代码是用记事本编写的,没有经过检查,因此可能包含一些解析错误。
【讨论】:
以上是关于uiautomator 怎么获取按钮状态的主要内容,如果未能解决你的问题,请参考以下文章