iOS UI自动化等待Web视图准备就绪并呈现

时间:2015-02-12 22:48:56

标签: javascript ios webview ui-automation ios-ui-automation

我正在使用Instruments创建iOS UI Automation javascript,以自动为我的iOS应用程序截取屏幕截图。我用来自动截取屏幕截图的工具是Snapshot

我正在使用webview作为我的应用程序的一部分,我想在继续执行脚本的其余部分之前拍摄完全呈现的webview的屏幕截图。 所以目前我的脚本看起来像:

var target = UIATarget.localTarget();
target.frontMostApp().mainWindow().scrollViews()[0].webViews()[0].links()[0].tap();
// take screen shot here
target.frontMostApp().navigationBar().leftButton().tap();

但是当屏幕截图拍摄时,webview没有完全渲染,所以它采取空屏幕并返回主屏幕。 有没有办法等到webview完全加载,然后拍摄屏幕截图并继续其余的脚本?

2 个答案:

答案 0 :(得分:0)

你可以使用计算样式,放置一些惰性样式属性(我使用剪辑),你可以用1秒的间隔检查(如果你使用css文件更好用它创建一个类并使用元素上的类)。 / p>

以下函数用户获取计算的样式。

function getStyle (el, prop) {
    try {
        if (getComputedStyle !== undefined) {
            return getComputedStyle(el, null).getPropertyValue(prop);
        }
        else {
            return el.currentStyle[prop];
        }
    } catch (e) {
        return el.currentStyle[prop];
    }
}

您可以尝试的计时器this

请注意,计算机样式可能因浏览器而异。

希望它有所帮助...

答案 1 :(得分:0)

Illuminator框架(完全披露,我写了它)在其Extensions.js中提供了一个名为waitForChildExistence()的函数,它允许您连续评估对元素的引用,直到它实际出现。

你会做这样的事情等待10秒才能加载webview:

var webView = target.frontMostApp().mainWindow().scrollViews()[0].webViews()[0];
webView.tap();

webView.waitForChildExistence(10, true, "a specific link in the web view", function(wb) {
    // the argument wb will contain the reference to our var webView
    return wb.links()["the link you are waiting for"];
});

// take screen shot here
target.frontMostApp().navigationBar().leftButton().tap();