如何在Android设备移动端浏览器中用Appium&Selenium(Java)隐藏键盘
解决Android移动端浏览器中Appium隐藏键盘失效的问题
我碰到过好几个开发者遇到这个问题——driver.hideKeyboard()在原生APP里跑得好好的,一到移动端浏览器就罢工。这主要是因为WebView的键盘交互逻辑和原生控件不一样,Appium的原生隐藏键盘方法没法直接适配。下面给你几个亲测有效的解决方案:
1. 模拟按下Android返回键
这是最通用的方法,不管是浏览器还是APP,按下返回键几乎都会收起键盘。根据你用的Appium版本,代码写法略有不同:
旧版Appium(使用AndroidKeyCode)
import io.appium.java_client.android.AndroidKeyCode; import io.appium.java_client.android.nativekey.KeyEvent; // 模拟返回键按下 driver.pressKey(new KeyEvent(AndroidKeyCode.BACK));
新版Appium(使用AndroidKey枚举)
import io.appium.java_client.android.nativekey.AndroidKey; import io.appium.java_client.android.nativekey.KeyEvent; // 模拟返回键按下 driver.pressKey(new KeyEvent(AndroidKey.BACK));
这个方法简单粗暴,几乎所有Android设备和浏览器都支持,优先推荐。
2. 点击页面空白区域
如果返回键会触发页面后退(比如某些单页应用),那可以试试点击页面上的空白区域。你可以通过坐标定位空白处,或者找一个没有交互的元素:
新版Appium用Actions类
import org.openqa.selenium.interactions.Actions; // 假设空白区域坐标是(500, 1000),根据你的设备屏幕尺寸调整 Actions actions = new Actions(driver); actions.moveByOffset(500, 1000).click().perform();
旧版Appium用TouchAction类
import io.appium.java_client.TouchAction; import io.appium.java_client.touch.offset.PointOption; TouchAction touchAction = new TouchAction(driver); touchAction.tap(PointOption.point(500, 1000)).perform();
注意要确保点击的位置真的是空白,别误触到按钮或输入框。
3. 执行ADB命令直接收起键盘
通过Appium调用ADB命令,绕开WebView的限制,直接让系统收起键盘:
import io.appium.java_client.android.AndroidDriver; import com.google.common.collect.ImmutableMap; // 执行ADB的input keyevent命令(4是返回键的keycode) ((AndroidDriver) driver).executeScript("mobile: shell", ImmutableMap.of("command", "input keyevent 4"));
这个方法和第一种原理类似,但直接通过系统命令执行,稳定性拉满,适合一些特殊场景。
4. 配置输入法兼容性参数
有些第三方输入法会干扰Appium的键盘操作,你可以在初始化DesiredCapabilities时配置原生输入法:
import org.openqa.selenium.remote.DesiredCapabilities; DesiredCapabilities caps = new DesiredCapabilities(); // 启用Unicode键盘,测试结束后重置输入法 caps.setCapability("unicodeKeyboard", true); caps.setCapability("resetKeyboard", true);
这样Appium会使用自带的输入法,避免第三方输入法的兼容性问题,有时候能让driver.hideKeyboard()重新生效(不过浏览器里还是推荐前面的方法)。
内容的提问来源于stack exchange,提问作者vijay
相关产品推荐
相关产品推荐

