如何使用Appium在iOS移动自动化中隐藏键盘

时间:2017-05-16 12:24:24

标签: ios appium

我使用的是iOS版本10.2,xcode版本是8.3。

有人能让我知道如何使用Appium在iOS移动自动化中隐藏键盘吗?

使用的编程语言:Java。

7 个答案:

答案 0 :(得分:1)

您可以使用以下代码段隐藏键盘:

driver.getKeyboard().pressKey(Keys.RETURN);

答案 1 :(得分:0)

我更喜欢点击iOS键盘上的最后一个键,而不是隐藏:

    @HowToUseLocators(iOSXCUITAutomation = LocatorGroupStrategy.CHAIN)
    @iOSXCUITFindBy(className = "XCUIElementTypeKeyboard")
    @iOSXCUITFindBy(className = "XCUIElementTypeButton")
    private List<IOSElement> last_iOSKeyboardKey;

    @HowToUseLocators(iOSXCUITAutomation = LocatorGroupStrategy.CHAIN)
    @iOSXCUITFindBy(className = "XCUIElementTypeKeyboard")
    @iOSXCUITFindBy(iOSNsPredicate = "type == 'XCUIElementTypeButton' AND " +
            "(name CONTAINS[cd] 'Done' OR name CONTAINS[cd] 'return' " +
            "OR name CONTAINS[cd] 'Next' OR name CONTAINS[cd] 'Go')")
    private IOSElement last_iOSKeyboardKey_real;

    public boolean tapLastKeyboardKey_iOS() {
        System.out.println("   tapLastKeyboardKey_iOS()");
        boolean bool = false;
        setLookTiming(3);
        try {
// one way            
//bool =  tapElement_XCTest(last_iOSKeyboardKey.get(last_iOSKeyboardKey.size()-1));
// slightly faster way
            bool =  tapElement_XCTest(last_iOSKeyboardKey_real);
        } catch (Exception e) {
            System.out.println("   tapLastKeyboardKey_iOS(): looks like keyboard closed!");
            System.out.println(driver.getPageSource());
        }
        setDefaultTiming();
        return bool;
    }

答案 2 :(得分:0)

您可以使用java_client library方法:

driver.findElementByAccessibilityId("Hide keyboard").click();

driver.hideKeyboard(HideKeyboardStrategy.TAP_OUTSIDE);

driver.hideKeyboard(HideKeyboardStrategy.PRESS_KEY, "Done");

答案 3 :(得分:0)

我尝试使用以上所有方法。在某些情况下,它并不完美。在我的方式,它将点击键盘的左上角。

public void hideKeyboard() {
    if (isAndroid()) {
        driver.hideKeyboard();
    } else {
        IOSDriver iosDriver = (IOSDriver) driver;
        // TODO: Just work for Text Field
        // iosDriver.hideKeyboard();
        // TODO: Tap outside of Keyboard
        IOSElement element = (IOSElement) iosDriver.findElementByClassName("XCUIElementTypeKeyboard");
        Point keyboardPoint = element.getLocation();
        TouchAction touchAction = new TouchAction(driver);
        touchAction.tap(keyboardPoint.getX() + 2, keyboardPoint.getY() - 2).perform();
        try {
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

答案 4 :(得分:0)

我尝试了driver.hideKeyboard(),但对我来说不起作用。 因此,我尝试了方式1:通过按按钮指定键名和方式2:检查与appium的键坐标并执行操作。两种方式都对我有用。

    // way 1
    driver.findElementByXPath(String.format("//XCUIElementTypeButton[@name='%s']", "Done")).click();
    // way 2
    TouchAction touchAction = new TouchAction(driver);
    touchAction.tap(new PointOption().withCoordinates(345, 343)).perform();

答案 5 :(得分:0)

我注意到“完成”不属于键盘组。因此,我尝试使用名称“ Done”作为引用来获取元素。我最终尝试了此方法,并且有效。

driver.findElementByName("Done").click(); 

声明为IOSDriver的“驱动程序”集。

答案 6 :(得分:0)

Python解决方案-2020:

override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    contentView.isUserInteractionEnabled = true
}