在Xcode UI测试中使用SFSafariViewController或WKWebView

免责声明:阅读前请检查对本文的评论。 Ilya Puchka 找到了更好的解决方案作为解决方法。

您可以注意到,当您使用其录制工具录制UI Test并点击SFSafariViewController内容时,Xcode 9.3崩溃。

 捕获到“ NSInternalInconsistencyException”,“无效的参数不令人满意:[后裔_isDescendantOfElement:self]” 

发生这种情况是由于Xcode中的错误,非常令人讨厌。 例如,如果我们要测试Facebook或其他社交登录信息,则需要与Web视图进行交互。

有趣的是,在调试期间,您可以进行debugPrint Web视图的所有按钮和字段,而不会出现任何问题。 但是由于NSInternalInconsistencyException的原因,您无法在文本字段中tap按钮或typeText。

为了成功进行测试,我需要Web视图元素中的一些内容:

  • 检查元素是否存在
  • 等待元素出现
  • 点击按钮
  • 清除文本字段中的文本
  • 在文字栏位中输入文字

请记住,我们可以debugPrint元素,我们可以尝试这个疯狂的解决方案:解析元素的debugDescription ,从中获取其框架,然后按坐标点击XCUIApplication 。 让我们编码为:

等待元素出现
点击元素并检查元素是否存在

下一个问题是我们不能在文本字段中typeText Text。 但这不能阻止我们,对不对? 我们可以点击位置,因此可以通过复制/粘贴菜单粘贴文本。 同样,我们可以使用“全选”“剪切”清除文本字段中的当前文本。

咱们试试吧。

在文字栏位中输入文字

就这样。 现在,我们可以测试Web视图中的许多内容。 这应该适用于SFSafariViewController并且希望与WKWebViewUIWebView (我没有对此进行测试)。


所有代码都在一个文件中:https://gist.github.com/pilot34/09d692f74d4052670f3bae77dd745889