我很感激Android设备上的一些测试自动化方面的一些帮助。我们使用Appium和RemoteWebDriver代码访问Android模拟器,打开我们的应用程序,点击并移动应用程序UI,这一切似乎都运行良好。
然而,作为我测试的一部分,我想使用Appium在设备上发起电话呼叫,保持呼叫打开一分钟左右,然后挂机。是否可以通过RemoteWebDriver对象执行此操作?
如果没有,建议在模拟器上进行调用的方法是什么?我已经看到一些关于使用直接telnet调用到模拟器的讨论,但希望有更好的方法!
答案 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:
如果有人有更好的方法来做到这一点,我很高兴看到它!马丁
答案 3 :(得分:0)
按通话键。 dr.sendKeyEvent(5);
找到拨号盘 。driver.findElementById( “com.android.dialer:ID / dialpad_button”)点击();
通过发送密钥或sendKeyEvents输入类型。 driver.findElement(By.className( “android.widget.EditText”))的SendKeys(phoneNumber的);
按通话键 。driver.findElementById( “com.android.dialer:ID / dial_button”)点击();
等待一下,然后按结束通话按钮。 。dr.findElementById( “com.android.dialer:ID / endButton”)点击();