我正在使用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完全加载,然后拍摄屏幕截图并继续其余的脚本?
答案 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();