如何为 UITableView 中的最后一个 UITableViewCell 创建 XCUIElement 查询?
How to create an XCUIElement query for the last UITableViewCell in a UITableView?
我正在创建一个 XCTestCase
。对于其中一种测试方法,将其称为 func testConfirmLastCellContent() { ... }
,我想确认在 UITableViewCell
中存在一个值为 "98765"
的 staticText
子元素(我将table 视图单元格的 textLabel.text
属性 中的文本值)。此单元格上方列出了 4 table 个视图单元格。每个单元格的 textLabel.text
的 String
值为 "12345"
,除了第二个单元格,它与最后一个单元格具有相同的文本值:"98765"
.
每个单元格的 textLabel.text
属性 的 String
值,则如下所示:
"12345"
"98765"
"12345"
"12345"
"98765"
这些 textLabel.text
值分别是 仅 视图单元格中的视觉子元素。
如果我像这样创建一个简单的 XCUIElementQuery
...
let staticTextForLastCell = XCUIApplication().staticTexts["98765"]
...并像这样断言其存在 true
...
XCTAssert(staticTextForLastCell.exists == true)
...然后测试将 通过 ,但我怎么知道我得到了最后一个单元格?显然,我无法从该查询中得知,因为它可能是从第二个单元格中提取的。
到目前为止,我找不到 XCTest
class/method 来专门获取最后一个 UITableViewCell
并查询其详细信息。
我的目标是获取最后一个单元格并确认其 textLabel.text
值符合我的预期。我该怎么做?
注意:我无法在任何 table 视图单元格上 add/subtract/change 文本、视觉等元素。
编辑:
我还应注意,UITableViewCell
是由正在测试的应用程序动态生成的。因此,我无法 tag
它们或为 textLabel
或单元格填充 accessibilityIdentifier
属性。
我的设置如下:
- 操作系统:macOS Mojave 10.14.6
- IDE: Xcode 10.3
- SDK: iOS 12.4 SDK
- 部署目标:iOS12.0
- 语言: Swift 5
您或许应该为 XCUIElementQuery
添加一个扩展
extension XCUIElementQuery {
var lastMatch : XCUIElement {return self.element(boundBy: self.count - 1)}
}
然后你可以这样断言你的单元格:
XCTAssertEqual(app.cells.lastMatch.staticTexts.element.label,
"98765",
"Unexpected text of the last cell")
这是有用的东西...
let app = XCUIApplication()
let cells = app.cells
let lastCell = cells.element(boundBy: cells.count - 1)
let textOfLastCell = lastCell.staticTexts["98765"]
XCTAssert(textOfLastCell.exists)
注意:Smart Monkey 的回答使用了扩展名,这可能是可取的。上面是一种更内联的方式。
编辑:我之前说过,如果不在查询 cells
之前查询 tables
,我将无法让它工作。它 在没有 tables
查询的情况下工作 。
编辑:根据 Chris 的评论将 XCTAssert(textOfLastCell.exists == true)
更改为 XCTAssert(textOfLastCell.exists)
。干净一点。
我正在创建一个 XCTestCase
。对于其中一种测试方法,将其称为 func testConfirmLastCellContent() { ... }
,我想确认在 UITableViewCell
中存在一个值为 "98765"
的 staticText
子元素(我将table 视图单元格的 textLabel.text
属性 中的文本值)。此单元格上方列出了 4 table 个视图单元格。每个单元格的 textLabel.text
的 String
值为 "12345"
,除了第二个单元格,它与最后一个单元格具有相同的文本值:"98765"
.
每个单元格的 textLabel.text
属性 的 String
值,则如下所示:
"12345"
"98765"
"12345"
"12345"
"98765"
这些 textLabel.text
值分别是 仅 视图单元格中的视觉子元素。
如果我像这样创建一个简单的 XCUIElementQuery
...
let staticTextForLastCell = XCUIApplication().staticTexts["98765"]
...并像这样断言其存在 true
...
XCTAssert(staticTextForLastCell.exists == true)
...然后测试将 通过 ,但我怎么知道我得到了最后一个单元格?显然,我无法从该查询中得知,因为它可能是从第二个单元格中提取的。
到目前为止,我找不到 XCTest
class/method 来专门获取最后一个 UITableViewCell
并查询其详细信息。
我的目标是获取最后一个单元格并确认其 textLabel.text
值符合我的预期。我该怎么做?
注意:我无法在任何 table 视图单元格上 add/subtract/change 文本、视觉等元素。
编辑:
我还应注意,UITableViewCell
是由正在测试的应用程序动态生成的。因此,我无法 tag
它们或为 textLabel
或单元格填充 accessibilityIdentifier
属性。
我的设置如下:
- 操作系统:macOS Mojave 10.14.6
- IDE: Xcode 10.3
- SDK: iOS 12.4 SDK
- 部署目标:iOS12.0
- 语言: Swift 5
您或许应该为 XCUIElementQuery
extension XCUIElementQuery {
var lastMatch : XCUIElement {return self.element(boundBy: self.count - 1)}
}
然后你可以这样断言你的单元格:
XCTAssertEqual(app.cells.lastMatch.staticTexts.element.label,
"98765",
"Unexpected text of the last cell")
这是有用的东西...
let app = XCUIApplication()
let cells = app.cells
let lastCell = cells.element(boundBy: cells.count - 1)
let textOfLastCell = lastCell.staticTexts["98765"]
XCTAssert(textOfLastCell.exists)
注意:Smart Monkey 的回答使用了扩展名,这可能是可取的。上面是一种更内联的方式。
编辑:我之前说过,如果不在查询 cells
之前查询 tables
,我将无法让它工作。它 在没有 tables
查询的情况下工作 。
编辑:根据 Chris 的评论将 XCTAssert(textOfLastCell.exists == true)
更改为 XCTAssert(textOfLastCell.exists)
。干净一点。