滚动直到元素可见 iOS UI Automation with Xcode 7

2024-01-11

因此,通过新的 Xcode 更新,Apple 改变了我们进行 UI 测试的方式。在工具中,我们使用java脚本函数“isVisible”来确定我们的目标元素是否可见。

我正在尝试在 Objective-C 中复制它,但我似乎找不到与之等效的东西。我有一个表格视图,一个带有两个标签的原型单元。假设这个原型电池可以重复使用 50 次。

我试图滚动直到最后一个单元格可见,我通过这样做来做到这一点:

if (![[[[[[XCUIApplication alloc] init].tables childrenMatchingType:XCUIElementTypeCell] matchingIdentifier:@"cell"] elementBoundByIndex:49].staticTexts[@"text"] exists]) {
        [[[[[[XCUIApplication alloc] init].tables childrenMatchingType:XCUIElementTypeCell] matchingIdentifier:@"cell"] elementBoundByIndex:0].staticTexts[@"text"] swipeUp];
}

但这不会滑动,因为加载视图时该元素就存在。请帮忙,因为这让我发疯。


您应该扩展 XCUIElement 的方法列表。第一种方法(scrollToElement:) 将在 tableView 上调用,第二个扩展方法可帮助您确定该元素是否位于主窗口上。

extension XCUIElement {

    func scrollToElement(element: XCUIElement) {
        while !element.visible() {
            swipeUp()
        }
    }

    func visible() -> Bool {
        guard self.exists && !CGRectIsEmpty(self.frame) else { return false }
        return CGRectContainsRect(XCUIApplication().windows.elementBoundByIndex(0).frame, self.frame)
    }

}

滚动代码应如下所示(例如滚动到最后一个单元格):

func testScrollTable() {
    let app = XCUIApplication()
    let table = app.tables.elementBoundByIndex(0)
    let lastCell = table.cells.elementBoundByIndex(table.cells.count-1)
    table.scrollToElement(lastCell)
}

Swift 3:

extension XCUIElement {
    func scrollToElement(element: XCUIElement) {
        while !element.visible() {
            swipeUp()
        }
    }

    func visible() -> Bool {
        guard self.exists && !self.frame.isEmpty else { return false }
        return XCUIApplication().windows.element(boundBy: 0).frame.contains(self.frame)
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

滚动直到元素可见 iOS UI Automation with Xcode 7 的相关文章

随机推荐

  • setTimeout 在函数内部调用函数 - 范围问题

    所以 问题是我的函数内部有一个函数需要由 setTimeout 调用 但这不起作用 因为 setTimeout 会假设它调用的函数将根作为其作用域 知道如何在不改变函数范围的情况下解决这个问题吗 Edit 我的意思是 function ge
  • CUDA GPU 处理:类型错误:compile_kernel() 得到意外的关键字参数“boundscheck”

    今天我开始使用 CUDA 和 GPU 处理 我找到了这个教程 https www geeksforgeeks org running python script on gpu https www geeksforgeeks org runn
  • 双指针转换,传递给带有 `const void **ptr` 参数的函数

    GCC 给我以下警告 note expected const void but argument is of type const struct auth 有没有什么情况可能会导致问题 更大的片段是 struct auth current
  • 停止表单输入框自动完成的正确方法是什么?

    我有一个表单 其中包含附加到一个 JQUERY 日期选择器
  • Spring Data MongoDB 4.0 事务支持

    MongoDB 4 0即将推出交易 https www mongodb com transactions支持 ACID 保证 Spring Data MongoDB 是否已经支持 MongoDB 中的事务 如果不支持 这个很棒的功能何时可用
  • Django Rest Framework - 有效地检索反向外键的相关字段

    我有以下代表用户工作组的模型 每个工作组均设一名组长和成员 class WorkingGroup models Model group name models CharField max length 255 leader models F
  • 手动编组到线程

    在 WinForms 中 您有Control BeginInvoke 这意味着您可以将后台线程的调用编组到创建控件句柄的主 UI 线程 这很好 但是 在 C 中 如何在两个 标准 线程之间执行此操作 我编写了一个服务总线 它有一个处理器线程
  • 显示从 Jscript 运行的 shell 命令的输出

    我想在 Windows 计算机上从 IE 中的 jscript 运行 shell 命令 我有以下 jscript 函数 function execCommand command var myShell new ActiveXObject W
  • Brunch 需要使用 Node.js 模块

    我设置了 Brunch 以便于一起编译 JS 但也希望能够将 node js 模块与 require 一起使用 尝试了一段时间后 我被难住了 我希望能够做这样的事情 var myJSfile1 require foo var myJSfil
  • 带有 Active Directory PartialResultException 的 JNDI

    我基本上是在 Active Directory 中遍历 LDAP 树 在我查询的每个级别 objectClass 当我在根上执行此操作时 例如 dc example dc com 我得到下面的异常 这在我们的其他 LDAP 实例上运行良好
  • 如何使用 C# 4.0 检测 Windows 8 操作系统?

    我必须在我的 C Windows 应用程序中检测 Windows 8 操作系统并进行一些设置 我知道我们可以使用以下命令检测 Windows 7Environment OSVersion 但是如何检测Windows 8呢 提前致谢 Vers
  • SQL查询和Unicode问题

    我对 unicode 数据的 Sql 查询有一个非常奇怪的问题 这是我所得到的 SQL Server Express 2008 R2 AS 包含汉字 单词 短语的表 100 000行 当我运行以下命令时 我得到了正确的行 返回的 36 个其
  • Delphi中绝对路径和相对路径的转换

    Delphi中有执行绝对相对路径转换的标准函数吗 例如 基本 路径是 C Projects Project1 相对路径是 Shared somefile pas 绝对路径是 C Projects Shared somefile pas 我正
  • IntelliJ 缩短 Cucumber 测试的命令行 [重复]

    这个问题在这里已经有答案了 我在 IntelliJ 中运行 Cucumber 测试时遇到问题 当我尝试运行功能或场景时 出现以下错误 Error running Feature
  • 列名作为 INSERT 语句中的参数

    我想创建一个存储过程我想在表中插入值的地方 但我不知道我必须在哪个字段中插入值以及在运行时我将决定应将值插入哪个字段 我想做的是 insert into Tablename ColumnName Description values Col
  • 如何实现可写流

    我想将数据从 amazon kinesis 流传输到 s3 日志或 Bunyan 日志 该示例使用文件写入流或标准输出 我将如何实现我自己的可写流 this works var file fs createWriteStream my lo
  • 以编程方式更改 Google 翻译下拉菜单

    在一个网站上 我尝试使用以下代码添加谷歌翻译下拉列表 function googleTranslateElementInit new google translate TranslateElement pageLanguage en goo
  • Facebook“点赞按钮”返回 X-Frame-Options Deny

    我正在尝试在博客的每篇文章上添加一个 Facebook 的 点赞按钮 代码粘贴正确 但我收到此错误 Refused to display https www facebook com undefined plugins like php a
  • 用于 32 位 x86 汇编的 DOS 调试程序

    你们中的许多人可能还记得古老的 DOS 程序 debug 尽管它在很多方面都已经过时 但它的好处之一是 人们可以轻松地找到给定指令的字节序列 而无需经历编写程序 编译 反汇编 检查文件内容等步骤 输入指令 然后转储指令地址 遗憾的是 调试
  • 滚动直到元素可见 iOS UI Automation with Xcode 7

    因此 通过新的 Xcode 更新 Apple 改变了我们进行 UI 测试的方式 在工具中 我们使用java脚本函数 isVisible 来确定我们的目标元素是否可见 我正在尝试在 Objective C 中复制它 但我似乎找不到与之等效的东