无法单击使用Appium Java for Android应用程序未启用的按钮

时间:2018-06-06 07:39:34

标签: java appium appium-android

我必须创建转移。当我运行脚本时,转移'已启用'的按钮是错误的因此脚本无法点击'转移'按钮&失败。我附上了uiautomator viewer dump的屏幕截图。enter image description here

我找到的解决方法是手动点击金额编辑框,然后启用屏幕上的Android键盘,并手动输入数值'金额'田野&然后'转移'按钮已启用&可以点击。但我不知道如何从屏幕上的Android键盘输入编辑框中的值,然后摆脱这个键盘输入日期&按'转移'按钮。 enter image description here

非常感谢您的帮助。感谢。

3 个答案:

答案 0 :(得分:0)

首先设置以下功能:

capabilities.setCapability("unicodeKeyboard", true);
capabilities.setCapability("resetKeyboard", true);

第二次尝试按以下方式隐藏键盘:

driver.hideKeyboard(); // doesn't work on newer versions of appium

或试试这个:

driver.pressKeyCode(AndroidKeyCode.BACK);  //this also doesn't work on all devices but give it a try

对于日期控制,我不太确定您使用日期选择器或某些自定义日期控件的控件,但是在每个操作上都尝试隐藏键盘。

答案 1 :(得分:0)

您可以使用以下代码段隐藏软键盘。它对我有用。

public void someMethod(){
driver.getKeyboard();
        try {
            if (checkSoftKeyboard())
                driver.hideKeyboard();
        } catch (IOException e) {
            e.printStackTrace();
        }
}

public boolean checkSoftKeyboard() throws IOException {
        boolean isKeyboardPresent = false;
        Process p = Runtime.getRuntime().exec("adb shell dumpsys input_method | grep mInputShown");
        BufferedReader   in = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String outputText = "";

        while ((outputText = in.readLine()) != null) {

            if(!outputText.trim().equals("")){
                String keyboardProperties[]=outputText.split(" ");
                String keyValue[]=keyboardProperties[keyboardProperties.length-1].split("=");

                String softkeyboardpresenseValue=keyValue[keyValue.length-1];
                if(softkeyboardpresenseValue.equalsIgnoreCase("false")){
                    isKeyboardPresent=false;
                }else{
                    isKeyboardPresent=true;
                }
            }
        }
        in.close();
        return isKeyboardPresent;
    }

checkSoftKeyboard 方法会检查软键盘是否已经存在?如果它在那里它将简单地隐藏软键盘。然后,您将能够看到转移按钮。

希望这对你有用。谢谢!

答案 2 :(得分:0)

我能够解决这个问题。我的方法是首先点击'Amount'字段,然后sendkeys为amount的值。有关详细信息,请参阅以下代码: -

    //locating the amount field using xpath
    MobileElement amount = driver.findElement(By.xpath("//android.widget.EditText[@resource-id='com.abc.rbanking:id/workflow_step_amount_value']"));

    amount.click();

    amount.sendKeys("1.25");
   //clicking and sendkeys would enable the disabled 'Transfer' button

   //locating the 'Date' field and click it. Clicking it would get rid of soft android keyboard
    driver.findElement(By.xpath("//*[@text = 'Date']")).click();

    Thread.sleep(3000);

    driver.findElement(By.id("com.abc.rbanking:id/back_button")).click();

    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);

    driver.findElement(By.xpath("//android.widget.Button[@resource-id='com.abc.rbanking:id/PrimaryButton' and @text='Transfer']")).click();