【问题标题】:scrollToVisible not working in while scrolling a tableview in iOS UIAutomation在 iOS UIAutomation 中滚动表格视图时,scrollToVisible 不起作用
【发布时间】:2012-03-14 18:21:00
【问题描述】:
我正在为 iOS 中的UIAutomation 编写脚本。我正在录制 UITableView 在 Instruments 中滚动,但是当我运行相同的录制脚本时,它不会滚动 view。
它调用“scrollToVisible”来滚动。例如:
target.frontMostApp().mainWindow().scrollViews()[0].tableViews()[0].cells()[3].scrollToVisible();
不过,它不会滚动它,因此在点击此元素时会出错。为什么会这样?
【问题讨论】:
标签:
ios
ui-automation
ios-ui-automation
【解决方案1】:
在调用 scrollToVisible() 之前尝试检查您尝试操作的元素是否为 isValid 或/和 isVisible
var cellToScroll = target.frontMostApp().mainWindow().scrollViews()[0].tableViews()[0].cells()[3];
if ( cellToScroll.checkIsValid() )
{
if (!cellToScroll.isVisible() )
{
cellToScroll.scrollToVisible();
}
// do other actions with object
}
else
{
UIALogger.logMessage("object is invalid");
}
此外,有时记录器会捕获不可见的元素。例如,您有 2 个视图。视图 1 和视图 2。 View1 有 scrollView>table>cells。 View2 有一些不可访问的元素。 View2 显示在 view1 上。在这种情况下,记录器将忽略 View2 并捕获 view1 元素。
在这种情况下,运行脚本将给出相同的错误。 checkIsValid() 将返回 true,isVisible() 将返回 false,并且脚本将在 cellToScroll.scrollToVisible() 上失败并出现相同的错误;在这种情况下,您需要进行一些额外的验证,例如 - View2 是否可见或类似的东西。
【解决方案2】:
我知道这是不久前提出的,但上面的代码不起作用。这是因为 isVisible() 返回一个数字而不是布尔值。要查看单元格在页面上是否可见,您必须检查 isVisible() 是否返回 1:
if (cellToScroll.isVisible() == 1 )
{
cellToScroll.scrollToVisible();
}