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

时间:2014-04-04 19:12:50

标签: android appium phone-call

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

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

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

4 个答案:

答案 0 :(得分:2)

您可以设置以下所需功能:

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

并使用此代码段通过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秒后断开呼叫。

答案 1 :(得分: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();
}

答案 2 :(得分:0)

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

  1. 数字文本字段:/ linear / linear / editText
  2. 数字1按钮:/ linear / table / row [1] / imageButton [1]
  3. Number 5按钮:/ linear / table / row [2] / imageButton [2]
  4. 拨号按钮:/ linear / frame / imageButton
  5. 如果有人有更好的方法来做到这一点,我很高兴看到它!马丁

答案 3 :(得分:0)

  1. 按主页按钮 driver.sendKeyEvent(3);
  2. 按通话键。 dr.sendKeyEvent(5);

  3. 找到拨号盘 。driver.findElementById( “com.android.dialer:ID / dialpad_button”)点击();

  4. 通过发送密钥或sendKeyEvents输入类型。 driver.findElement(By.className( “android.widget.EditText”))的SendKeys(phoneNumber的);

  5. 按通话键 。driver.findElementById( “com.android.dialer:ID / dial_button”)点击();

  6. 等待一下,然后按结束通话按钮。 。dr.findElementById( “com.android.dialer:ID / endButton”)点击();