Javascript 自动化脚本不工作?

Javascript 自动化脚本不工作?,javascript,ios,instruments,ui-automation,Javascript,Ios,Instruments,Ui Automation,这是我第一次使用xcode中的自动化工具,该脚本适用于除服务器连接之外的所有按钮点击。我不知道原因 这是我到目前为止试过的脚本 var target = UIATarget.localTarget(); target.pushTimeout(4); target.popTimeout(); var window=target.frontMostApp().mainWindow() var appScroll=window.scrollViews()[0]; appScroll.logEleme

这是我第一次使用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();
上述脚本用于显示UIActivityIndicator,而不是在成功后移动到下一个控制器


我知道我肯定错过了一个非常简单的要点。因此,帮帮我吧

UIAutomation试图让开发人员“轻松”完成任务,但这样做会让事情变得非常混乱。听起来好像您正在获取对
窗口的引用,等待一个按钮出现,然后在该按钮上执行
.tap()

我看到您已经考虑过处理与您的问题相关的
target.pushTimeout()
。超时系统允许您执行在任何正常系统中都不可能执行的操作:在元素存在之前获取对它的引用。我怀疑在幕后,UIAutomation会反复尝试获取所需的引用,只要
超时时间允许

因此,在您发布的示例中,这个“特性”可能会伤害您

var window=target.frontMostApp().mainWindow()
var appScroll=window.scrollViews()[0];
UIATarget.localTarget().delay(2);
appScroll.buttons()[1].tap();
如果视图在2秒延迟期间发生更改怎么办?您对
target.frontMostApp().mainWindow.scrollViews()[0]
的引用可能无效,或者它可能没有指向您认为指向的对象

在我们的示例中,我们完全忘记了超时系统,只是手动重新评估给定的引用,直到它实际返回某些内容。我们称之为,但其功能基本如下:

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
var myTimeout=3;//我们要等多久
//此函数用于选择一个元素
//相对于我们将传入的父元素(目标)
var selectorFn=函数(myTarget){
var ret=myTarget.frontMostApp().mainWindow.scrollViews()[0];
//断言ret存在、可见等
返回ret;
}
//重新评估我们的选择器,直到我们得到一些东西
var元素=null;
var later=获取当前时间()+myTimeout;
while(element==null&&get\u current\u time()

对于存在临时进度对话框的情况,此代码只需等待它消失,然后再成功返回所需的元素

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

我看到您已经考虑过处理与您的问题相关的
target.pushTimeout()
。超时系统允许您执行在任何正常系统中都不可能执行的操作:在元素存在之前获取对它的引用。我怀疑在幕后,UIAutomation会反复尝试获取所需的引用,只要
超时时间允许

因此,在您发布的示例中,这个“特性”可能会伤害您

var window=target.frontMostApp().mainWindow()
var appScroll=window.scrollViews()[0];
UIATarget.localTarget().delay(2);
appScroll.buttons()[1].tap();
如果视图在2秒延迟期间发生更改怎么办?您对
target.frontMostApp().mainWindow.scrollViews()[0]
的引用可能无效,或者它可能没有指向您认为指向的对象

在我们的示例中,我们完全忘记了超时系统,只是手动重新评估给定的引用,直到它实际返回某些内容。我们称之为,但其功能基本如下:

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
var myTimeout=3;//我们要等多久
//此函数用于选择一个元素
//相对于我们将传入的父元素(目标)
var selectorFn=函数(myTarget){
var ret=myTarget.frontMostApp().mainWindow.scrollViews()[0];
//断言ret存在、可见等
返回ret;
}
//重新评估我们的选择器,直到我们得到一些东西
var元素=null;
var later=获取当前时间()+myTimeout;
while(element==null&&get\u current\u time()

对于存在临时进度对话框的情况,此代码只需等待它消失,然后再成功返回所需的元素

谢谢你的回答,我会在尝试后回复。你预测了正确的推送超时似乎是我的问题。谢谢你的回答,我会在尝试后回复。你预测了正确的推送超时似乎是我的问题