在上篇文章中记录了各方面环境的问题,这次与上次不同的就是这次是用夜神模拟器来指定联系人打QQ电话
一、夜神模拟器配置:
在夜神模拟器上下载一个QQ,在QQ官网上就有,可自行下载。
二、打开Appium服务器、打开夜神模拟器,打开dos窗口
三、在dos窗口中连接夜神模拟器:
如果经常连接,那么打开模拟器,在dos窗口使用adb devices命令就能搜索到,不然就话,就要切换到夜神安装目录下,使用命令连接:
三、在eclipse工具上编写代码
在测试用例模中:
package com.testQQTel;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.AndroidKeyCode;
import io.appium.java_client.AppiumDriver;
import io.appium.java_client.MobileBy.ByAndroidUIAutomator;
import io.appium.java_client.TouchAction;
public class TestCase {
DesiredCapabilities dc;
AppiumDriver driver;
@Before
public void setUp(){
//1、创建DesiredCapabilities对象
dc = new DesiredCapabilities();
//2、设置属性
// dc.setCapability("deviceName", "MYQNW20507042786");
dc.setCapability("deviceName", "127.0.0.1:62001");
dc.setCapability("platformName", "Android");
dc.setCapability("appPackage", "com.tencent.mobileqq");
dc.setCapability("appActivity", ".activity.SplashActivity");
//设置appium可以输入中文
dc.setCapability("unicodeKeyboard", "true");
}
@Test
public void testQQTel() throws Exception{
driver = new AppiumDriver(new URL("http://127.0.0.1:4723/wd/hub"), dc);
//隐式等待
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
System.out.println("开始执行啦");
//1、点击同意协议
driver.findElement(By.id("com.tencent.mobileqq:id/dialogRightBtn")).click();
//2、点击登录按钮
driver.findElement(By.id("com.tencent.mobileqq:id/btn_login")).click();
driver.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").clear();
driver.findElementByAccessibilityId("请输入QQ号码或手机或邮箱").sendKeys("QQ账号");
driver.findElement(By.xpath("//android.widget.EditText[@content-desc="密码 安全"]")).clear();
driver.findElement(By.xpath("//android.widget.EditText[@content-desc="密码 安全"]")).sendKeys("QQ登录密码");
//勾选 已阅读协议....
driver.findElement(By.id("com.tencent.mobileqq:id/q6i")).click();
//成功 登录
driver.findElement(By.id("com.tencent.mobileqq:id/login")).click();
//搜索联系人
// driver.findElement(By.id("com.tencent.mobileqq:id/kag")).click();
driver.findElement(By.id("com.tencent.mobileqq:id/et_search_keyword")).sendKeys("刘五杠");
Thread.sleep(5000);
//点击搜索到的结果
TouchAction action = new TouchAction(driver);
action.press(500, 300).release().perform();
Thread.sleep(3000);
// 打电话之前,发送消息
driver.findElement(By.id("com.tencent.mobileqq:id/input")).sendKeys("姐姐要打电话啦"); driver.findElement(By.id("com.tencent.mobileqq:id/fun_btn")).click();
Thread.sleep(2000);
//点击 + 号
driver.findElement(By.id("com.tencent.mobileqq:id/gny")).click();
System.out.println("快要打电话啦");
Thread.sleep(2000);
//点击电话按钮
driver.findElement(By.id("com.tencent.mobileqq:id/dcf")).click();
//提醒授权,两项都允许
driver.findElement(By.id("com.android.packageinstaller:id/permission_allow_button")).click();
driver.findElement(By.id("com.android.packageinstaller:id/permission_allow_button")).click();
//发送萌萌表情
//driver.findElement(By.id("com.tencent.mobileqq:id/gnb")).click();
//Thread.sleep(2000);
//driver.findElementByAccessibilityId("卖萌").click();
//driver.findElement(By.id("com.tencent.mobileqq:id/fun_btn")).click();
System.out.println("等待结束");
}
@After
public void tearDown(){
driver.quit();
}
}
在执行测试用例的main方法中:
package com.testQQTel;
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
// TODO Auto-generated method stub
Result result = JUnitCore.runClasses(TestCase.class);
for(Failure failure:result.getFailures()){
System.out.println(failure.toString());
}
System.out.println(result.wasSuccessful());
}
}
最终执行结果:
在控制台:
在模拟器:
通话成功,没有手机也能打QQ电话啦。



