是否有类似于XCUIElement的WebElement的getText()

时间:2016-05-25 09:10:42

标签: selenium xcode-ui-testing

我正在使用 XCUITest 使用 Xcode 7.3 进行 AppleTV UI测试。

XCUIElementWebElement相同。但是getText()是否有类似的XCUIElement方法,它出现在 Selenium WebElement 中。

基本上我想从XCUIElement中捕捉文字。

E.g:

let ele:XCUIElement = XCUIApplication().collectionViews.cells[
                                               "Sign In to Activate"].

无论如何都要从元素中获取值:“登录以激活”。任何帮助?

2 个答案:

答案 0 :(得分:3)

拥有staticText XCUIElement后,您可以使用label属性获取文本。

let app = XCUIApplication()
let textElement = app.staticTexts["myLabelIdentifier"]
let text = textElement.label

您无法获取单元格的文本,因为单元格不是staticText(UILabel)对象。如果您的单元格包含UILabel(文本),那么您需要先找到该对象。

您可以通过app.staticTexts获取屏幕上的所有文字元素 - 然后您需要将文本元素列表缩小到您感兴趣的文本元素列表。这样,在您应用的代码中为UILabel添加accessibilityIdentifier

label.accessibilityIdentifier = "myLabelIdentifier" // This can be whatever String you like

如果您有多个单元格可以重复使用标签,那么您还需要能够识别您感兴趣的单元格。例如,如果要在第三个单元格中找到文本元素:

let app = XCUIApplication()
let cell = app.cells.elementBoundByIndex(2)
let textElement = cell.staticTexts["myLabelIdentifier"]
let text = textElement.label

答案 1 :(得分:1)

使用UI测试,您可能需要稍微改变一下您的问题。而不是尝试读取已知元素的值,而不是检查元素是否存在

实际上,这意味着要检查Web视图中是否显示具有预期值的标签。所以,如果您正在等待"登录激活"出现的标签可以通过以下方式断言:

let app = XCUIApplication()
let signInLabel = app.staticTexts["Sign In to Activate"]
XCTAssert(signInLabel.exists)

或者,如果元素实际上是一个链接,请通过links访问它,如下所示:

let signInLink = app.links["Sign In to Activate"]
XCTAssert(signInLink.exists)