使用UIAutomation禁用iOS模拟器的硬件键盘

7

我正在使用UIAutomation在iOS模拟器中进行自动化测试。

Xcode 6中,iOS模拟器的键盘行为已更改,类似于真实设备,并且现在有一个菜单项可以连接/断开Mac键盘到模拟器:硬件 > 键盘 > 连接硬件键盘

我不介意这个,但是当你连接Mac键盘时,模拟器将不再显示软件键盘。当您使用UIAutomation运行测试脚本时,例如UIATarget.localTarget().frontMostApp().keyboard().typeString("myString");等调用将失败,因为键盘不会出现,即使您已经使文本字段成为第一响应者。

这很烦人,因为如果我在模拟器中进行任何手动测试,我需要记住在运行任何UIAutomation测试之前禁用硬件键盘,否则它们都将失败。

从UIAutomation JS脚本内部是否有任何方法来检查硬件键盘设置并禁用它们?或者,是否有任何方法可以在执行UIAutomation脚本之前从命令行禁用它们?

4个回答

4
如果我正确理解了你的问题,你需要一种可靠的方法来输入文本。我只是使用setValue来实现这个功能。像这样:UIATarget.localTarget().frontMostApp().textFields().Login.setValue('sofa');

没问题。很抱歉这么晚才接受 :) - Matt Mc

3

对于Leo's答案的AppleScript进行了更新,因为Xcode 11中“Hardware”已更改为“I/O”。要使其在Xcode 11.4.1中运行,我需要一个bash脚本包装器来调用AppleScript scpt文件。

文件
./disable-hardware-keyboard
./disable-hardware-keyboard.scpt

tell application "Simulator"
    activate
end tell

tell application "System Events"
    set hwKB to value of attribute "AXMenuItemMarkChar" of menu item "Connect Hardware Keyboard" of menu 1 of menu item "Keyboard" of menu 1 of menu bar item "I/O" of menu bar 1 of application process "Simulator"
    if ((hwKB as string) is equal to "missing value") then
        do shell script "echo 'hardware keyboard is off'"
    else
        click menu item "Connect Hardware Keyboard" of menu 1 of menu item "Keyboard" of menu 1 of menu bar item "I/O" of menu bar 1 of application process "Simulator"
    end if
end tell

#!/bin/bash
cd $(dirname $0)
osascript disable-hardware-keyboard.scpt

2

由于Ian的脚本在网络上已不可见,这里是我修改后的苹果脚本关闭硬件键盘。

tell application "Simulator"
    activate
end tell

tell application "System Events"
    set hwKB to value of attribute "AXMenuItemMarkChar" of menu item "Connect Hardware Keyboard" of menu 1 of menu item "Keyboard" of menu 1 of menu bar item "Hardware" of menu bar 1 of application process "Simulator"
    if ((hwKB as string) is equal to "missing value") then
      do shell script "echo 'hardware keyboard is off'"
    else
      click menu item "Connect Hardware Keyboard" of menu 1 of menu item "Keyboard" of menu 1 of menu bar item "Hardware" of menu bar 1 of application process "Simulator"
    end if
end tell

1

我写了一个设置硬件键盘状态的AppleScript [其他版本],你可以这样执行:

bash$ osascript scripts/set_hardware_keyboard.applescript 0
menu item Connect Hardware Keyboard of menu Keyboard of menu item Keyboard of menu Hardware of menu bar item Hardware of menu bar 1 of application process iOS Simulator
bash$

在Illuminator中,它可以使用target().connectHardwareKeyboard()。因此,在每次测试运行之前,为了确保硬件键盘已被禁用,您需要在设置中执行以下操作:

automator.setCallbackPrepare(function () {
         target().connectHardwareKeyboard(false);
 });

什么是Illuminator? - Alex Zavatone
这是我编写的一个Apache许可的框架,用于进行iOS自动化测试,当时它是基于JavaScript的。后来它被更新为Swift库,尽管某些功能如桥接和标记不再支持。https://github.com/paypal/Illuminator - Ian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接