2

所以我通过单击菜单项出现了一个窗口。通常第一个文本框会立即获得键盘焦点,但在 UITest 中,窗口中没有任何内容获得键盘焦点(没有焦点环)。这是有问题的,因为它阻止我在文本字段中输入textField.typeText("someText")

我已经尝试.click()在窗口和文本框上尝试给它焦点,但似乎没有任何东西可以使窗口或文本框成为焦点。任何帮助将不胜感激

例子

MainMenu().menuItemForWindow.click() // Opens window
app.windows["windowTitle"].textFields["textBoxId"].click() // Clicks but field does not gain focus
app.windows["windowTitle"].textFields["textBoxId"].typeText("SomeText") // Is not typed into the textField

作为旁注,我已经验证了我查询的所有元素确实存在。

编辑:

我已经通过字面上的垃圾邮件让它工作了,typeText()直到它用类似的东西改变给定文本框的值

if let oldValue = textbox.value as? String {
   var newValue: String? = oldValue
   while newValue == oldValue {
         textbox.typeText("a")
         newValue = textbox.value as? String
   }
   //If we get here then we have edited the text box
   textbox.typeText(XCUIDeleteKey) // Get rid of spam text
   //TYpe what I want
   //...
 }

但是这种方法很老套,除了启发式方法(大约 15-30 秒)外,我真的无法暂停,所以我希望有人可以帮助解释一种更好的方法来确保专注于文本框,或者至少解释一下我是什么原来做错了。任何帮助将不胜感激。

4

1 回答 1

1

这里有两个可能的想法给你:

  1. 将辅助功能 ID 分配给您尝试与之交互的对象,并尝试通过辅助功能 ID 对其进行寻址。来自https://blog.metova.com/guide-xcode-ui-test

For element identification there is additionally elementMatchingPredicate(NSPredicate) and elementMatchingType(XCUIElementType, identifier: String?).

These are separate from containingPredicate(NSPredicate) and containingType(XCUIElementType, identifier: String?) which are checking the element for items inside it whereas the elementMatching... options are checking the values on the element itself. Finding the correct element will often include combinations of several query attributes.

  1. 在系统偏好设置中启用辅助功能 | 此处描述的可访问性:https: //support.apple.com/en-us/HT204434,然后发送键盘命令来设置焦点。
于 2017-10-06T19:22:41.663 回答