【问题标题】:Automation script is not working?自动化脚本不起作用?
【发布时间】:2015-11-25 18:44:29
【问题描述】:

这是我第一次在 xcode 中使用自动化工具该脚本适用于所有按钮点击,但用于连接服务器的按钮。不知道是什么原因

这是我目前尝试的脚本

var target = UIATarget.localTarget();
target.pushTimeout(4);
target.popTimeout();

var window=target.frontMostApp().mainWindow()
var appScroll=window.scrollViews()[0];
appScroll.logElementTree();
UIATarget.localTarget().delay(2);
appScroll.buttons()[1].tap();

上面的脚本可以显示 UIActivityIndi​​cator 而不是在成功后移动到下一个控制器

我知道我错过了一个非常简单的点。所以帮帮我

【问题讨论】:

    标签: javascript ios instruments ui-automation


    【解决方案1】:

    UIAutomation 试图让开发人员的事情变得“简单”,但这样做会使事情变得非常混乱。听起来您正在获得对 window 的引用,等待按钮出现,然后在该按钮上执行 .tap()

    我看到你已经考虑过搞乱target.pushTimeout(),这与你的问题有关。超时系统可以让你做一些在任何健全的系统中都无法做到的事情:在元素存在之前获取对元素的引用。我怀疑在幕后,UIAutomation 反复尝试获取您想要的参考——只要timeout 允许。

    因此,在您发布的示例中,此“功能”实际上可能会伤害您。

    var window=target.frontMostApp().mainWindow()
    var appScroll=window.scrollViews()[0];
    UIATarget.localTarget().delay(2);
    appScroll.buttons()[1].tap();
    

    如果视图在 2 秒延迟期间发生变化怎么办?您对target.frontMostApp().mainWindow.scrollViews()[0] 的引用可能无效,或者它可能未指向您认为您指向的对象。

    我们在Illuminator framework 中解决了这个问题,完全忘记了超时系统,只是手动重新评估给定的引用,直到它真正返回一些东西。我们称之为waitForChildExistence,但功能基本如下:

    var myTimeout = 3;  // how long we want to wait
    
    // this function selects an element 
    // relative to a parent element (target) that we will pass in
    var selectorFn = function (myTarget) {
        var ret = myTarget.frontMostApp().mainWindow.scrollViews()[0];
        // assert that ret exists, is visible, etc
        return ret;
    }
    
    // re-evaluate our selector until we get something
    var element = null;
    var later = get_current_time() + myTimeout;
    while (element === null && get_current_time() < later) {
        try {
            element = selectorFn(target);
        } catch (e) {
            // must not have worked
        }
    }
    
    // check whether element is still null
    
    // do something with element
    

    对于存在临时进度对话框的情况,此代码将简单地等待它消失,然后才能成功返回所需的元素。

    【讨论】:

    • 感谢您的回答,我试用后会回复
    • 你预测正确的 pushTimeout 似乎是我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多