【问题标题】:Is it possible to XCTest text fields in a webview?是否可以在 web 视图中 XCTest 文本字段?
【发布时间】:2018-03-04 13:06:44
【问题描述】:

我的应用中有一个 webview,但我需要进行一些 UI 测试,但是我无法找到文本字段元素来正确实施我的测试。有人有什么主意吗?谢谢。

【问题讨论】:

    标签: uiwebview xctest uitest


    【解决方案1】:

    如果你在 WKWebview 实例的输入中有占位符或文本值,你可以简单地做

    let app = XCUIApplication()
    ...
    let webViewsQuery = app.webViews
    let textfield1 = webViewsQuery.textFields["account email"]
    viewExists = textfield1(timeout: 1.0)
    if viewExists {
        textfield1.tap()
        sleep(1) // wait for keyboard
        textfield1.typeText("populated email value")
    
        let textfield2 = webViewsQuery.secureTextFields["Password"] // for password input type
        textfield2.tap()
        sleep(1) // wait for keyboard
        textfield2.typeText("populated password")
    }
    

    【讨论】:

      【解决方案2】:

      您必须将您的 HTML 元素公开给辅助功能。对于文本字段,您可以这样做。

      <div id="text-input">Super</div>
      <input type="text" aria-labelledby="text-input" value="empty" />
      

      您应该在可访问性检查器中看到类似的内容

      这就是您的测试的样子。

      func testExample()
      {            
          let
          textField = app.webViews.textFields["Super"]
          textField.tap()
      
          let before = textField.value as? String
          XCTAssertEqual(before, "empty")
      
          // This is strange but without this sleep typeText method doesn't work
          sleep(1)
      
          textField.typeText("lorem ipsum")
      
          let after = textField.value as? String
          XCTAssertEqual(after, "emptylorem ipsum")
      }
      

      通常,将 HTML 元素暴露给辅助功能是一个困难的领域。你可以找到很多例子here。您也可以查看list of supported elements。祝你好运。

      【讨论】:

      • 这个答案似乎不起作用。使用您的示例,输入确实出现在 Accessibility Inspector 中,如图所示,但是在 app.webViews.textFields["Super"]. 中找不到
      猜你喜欢
      • 2012-05-28
      • 2019-08-08
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多