根据项目要求,我正在开发移动应用程序自动化。当我执行在模拟器上工作正常的相同代码时出现问题,但是当涉及到真实设备时,相同的代码变得失败。问题是UiAutomator无法定位元素,因为本机键盘在模拟期间来到应用程序之前。我将整个事情执行到了适用于ANDROID API 18的Galaxy nexus。因此无需在Selendroid模式下执行整个自动化套件。在第一个编辑框中填充值后的下面的代码中,控件应该到达第二个编辑框以填充值,依此类推。但它没有填补价值,因为原生键盘在应用之前出现。
SwipeableWebDriver driver = new SwipeableWebDriver(
new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
List<WebElement> editTextList = driver.findElements(By
.className("android.widget.EditText"));
editTextList.get(0).sendKeys(c + "Bob");
editTextList.get(1).sendKeys("123");
editTextList.get(2).sendKeys("456");
el = driver.findElement(By.className("android.widget.Button"));
el.click();
请有任何想法解决此问题的人吗? 提前谢谢。
Priyank Shah
答案 0 :(得分:2)
首先,您应该了解软键盘是否处于活动状态 - 使用代码中的以下命令检查“mInputShown”参数 - 如果“true” - 活动软键盘。
adb shell dumpsys input_method | grep mInputShown
使用此代码隐藏运行旧版appium的Java-appium中的本机键盘。
driver.navigate().back()
P.S - adb命令对仿真器没用,因为正在检查其值的标志始终设置为true,无论您的键盘是否处于活动状态。
答案 1 :(得分:1)
我认为你不能,并且它不是appium的限制。 从我观察到的甚至UIAutomator都找不到键盘隐藏的元素。
我知道2个解决方案:
答案 2 :(得分:0)
您应该可以通过发送
来关闭键盘driver.findElement(By.name("Return")).click();
答案 3 :(得分:0)
添加换行符也适用 editTextList.get(2).sendKeys(&#34; 456 \ n&#34);
答案 4 :(得分:0)
如果您可以检测到键盘已打开,我建议拨打UiDevice.pressBack()来解除键盘。
答案 5 :(得分:0)
您可以使用以下代码解除键盘
driver.hideKeyboard();
答案 6 :(得分:0)
列出以下两行: driver.getKeyboard(); driver.hideKeyboard();
答案 7 :(得分:0)
这是一个uiautomator就绪的全功能方法,如果键盘是打开的,它将响应为true,如果它是关闭的,则为false:
public static boolean isKeyboardDisplayed() {
String checkKeyboardCommand = "dumpsys input_method | grep mInputShown";
try {
Process process = Runtime.getRuntime().exec(checkKeyboardCommand);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
process.waitFor();
if (output.toString().contains("mInputShown=true")) {
return true;
} else {
return false;
}
} catch (IOException e) {
throw new RuntimeException(e);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
答案 8 :(得分:0)
您可能需要在android功能中启用unicodeKeyboard: true
并使用键盘按钮Return(如果显示)隐藏键盘(在iOS和Android上适用于我)
例如,我正在使用ruby:
element = $appium.find_element(id: field_id)
element.clear
element.send_keys(data)
element.send_keys(:return) if driver.is_keyboard_shown