首页 文章

使用Appium在Android设备上拨打电话

提问于
浏览
0

我非常感谢Android设备上的一些测试自动化方面的一些帮助 . 我们使用Appium和RemoteWebDriver代码访问Android模拟器,打开我们的应用程序,点击并移动应用程序UI,这一切似乎都运行良好 .

但是,作为我测试的一部分,我想使用Appium在设备上发起电话呼叫,保持呼叫打开一分钟左右,然后挂机 . 是否可以通过RemoteWebDriver对象执行此操作?

如果没有,建议在模拟器上进行调用的方法是什么?我已经看到了一些关于对模拟器使用直接telnet调用的讨论,但希望有更好的方法!

4 回答

  • 0

    事实证明这是可能的,尽管可能比我预期的更痛苦 . 我必须做两件事:指定要打开的正确应用程序,并计算出拨号盘上按钮的xpath引用 . 活动是com.android.contacts.activities.DialtactsActivity和一些按钮的xpath是:

    • 数字文本字段:/ linear / linear / editText

    • 数字1按钮:/ linear / table / row [1] / imageButton [1]

    • 数字5按钮:/ linear / table / row [2] / imageButton [2]

    • 拨号按钮:/ linear / frame / imageButton

    如果有人有更好的方法来做到这一点,我会很高兴看到它!马丁

  • 2

    You may set these desired capabilities :

    capabilities.setCapability("androidPackage", "com.android.dialer");
          capabilities.setCapability("appActivity", "DialtactsActivity");
    

    and use this snippet to make call via Appium :

    remoteWebDriver.findElement(By.id("com.android.dialer:id/search_view")).sendKeys("NAME_OF_PERSON");        
    remoteWebDriver.findElements(By.id("com.android.dialer:id/dialer_search_item_view")).get(0).click();
    

    这将调用第一个搜索项

    try {
            Thread.sleep(60000); //
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    
        remoteWebDriver.findElement(By.id("com.android.dialer:id/endButton")).click();
    

    这将在60秒后断开呼叫 .

  • 0
    • 按主页按钮driver.sendKeyEvent(3);

    • 按通话键 . dr.sendKeyEvent(5);

    • 找到拨号盘driver.findElementById(“com.android.dialer:id / dialpad_button”) . click();

    • 通过发送键或sendKeyEvents键入数字 . driver.findElement(By.className( “android.widget.EditText”))的SendKeys(phoneNumber的) .

    • 按呼叫按钮driver.findElementById(“com.android.dialer:id / dial_button”) . click();

    • 等待并按结束通话按钮 . . dr.findElementById( “com.android.dialer:ID / endButton”)点击();

  • 1

    您可以使用ADB开始拨打电话:

    public static int makePhoneCall(AppiumDriver driver, Srting deviceId, String phoneNum, int callDuration) throws IOException, InterruptedException {
    
        callDuration *= 1000;
        cmd = "adb -s " + deviceId + " shell am start -a android.intent.action.CALL -d tel:" + phoneNum; //open a Dialer and placing a call right away
        Process exec = Runtime.getRuntime().exec(cmd); //starting a call and..
        Thread.sleep(callDuration);//..waiting for callDuration seconds before hangup
        driver.sendKeyEvent(6);// hang up phonecall
        return exec.exitValue();
    }
    

相关问题