谢谢打开这篇文章的每个你
测开之分层自动化(Python)招生简章
Python自动化测试报告美化
在python中进行数据驱动测试
太嚣张了!他竟用Python绕过了“验证码”
在网络世界里你不知道对面和你聊天的是人是鬼,是男是女,是胖是瘦,也许他们只是一堆脚本。
本文将通过自动化的手段,模拟微信聊天,同时也给大家提供IM的UI自动化测试中,对于聊天应该如何处理的思路。
采用工具为appium服务端1.10.1,java-client版本6.1.0,实现思路如下
testng配置文件如下:
以下是脚本实现:
package com.testfan.testcases;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
import io.appium.java_client.android.nativekey.AndroidKey;
import io.appium.java_client.android.nativekey.KeyEvent;
import io.appium.java_client.remote.AndroidMobileCapabilityType;
import io.appium.java_client.remote.AutomationName;
import io.appium.java_client.remote.MobileCapabilityType;
public class WXChat {
AndroidDriver driver;
static String switchFlag="";//两个手机上的账户切换变量
HashMap
HashMap
@Parameters({“udid”,“port”,“sysPort”})
@BeforeClass
public void initDriver(String udid,String port,String sysPort) throws Exception{
AChatContents.put(“你好”, “你是机器人吗”);
AChatContents.put(“我不是机器人”, “终于碰到个真人了”);
AChatContents.put(“那你是机器人吗”, “我是啊”);
BChatContents.put(“你好”, “你好”);
BChatContents.put(“你是机器人吗”, “我不是机器人”);
BChatContents.put(“终于碰到个真人了”, “那你是机器人吗”);
BChatContents.put(“我是啊”, “我去,机器人都疯了,88”);
//driver初始化
DesiredCapabilities caps = new DesiredCapabilities();
// deviceName表示要执行的测试设备名字,这个参数在安卓上可以随便写
caps.setCapability(MobileCapabilityType.DEVICE_NAME, “xxxxxx”);
// driver的session超时时间,默认是60秒
caps.setCapability(MobileCapabilityType.NEW_COMMAND_TIMEOUT, 600);
// automationName表示appium使用的测试引擎,默认是Appium,其实就是uiautomator
caps.setCapability(MobileCapabilityType.AUTOMATION_NAME, AutomationName.ANDROID_UIAUTOMATOR2);
//安卓多设备时并且使用uiautomator2引擎时,需要指定不同systemport
caps.setCapability(AndroidMobileCapabilityType.SYSTEM_PORT, Integer.valueOf(sysPort));
// unicodeKeyboard设置为true表示我们要使用appium自带的输入法,用来支持中文和隐藏键盘,并且将其设置为默认输入法
caps.setCapability(AndroidMobileCapabilityType.UNICODE_KEYBOARD, true);
// 在执行测试完成之后,将手机的输入法从appium自带的还原成我手机默认的输入法
caps.setCapability(AndroidMobileCapabilityType.RESET_KEYBOARD, true);
//表示不重签名app在设置为true的情况下
caps.setCapability(AndroidMobileCapabilityType.NO_SIGN, true);
//udid表示指定某台设备
caps.setCapability(MobileCapabilityType.UDID, udid);
//appPackage和appActivity表示你要启动的应用的包名和起始activity,这里是微信
caps.setCapability(AndroidMobileCapabilityType.APP_PACKAGE, “com.tencent.mm”);
caps.setCapability(AndroidMobileCapabilityType.APP_ACTIVITY, “com.tencent.mm.ui.LauncherUI”);
//不重置应用数据
caps.setCapability(MobileCapabilityType.NO_RESET, true);
driver=new AndroidDriver<>(new URL(“http://127.0.0.1:”+port+"/wd/hub"), caps);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
}
/**
交互聊天思路
@throws Exception
*/
@Test
public void chat() throws Exception{
//因为我们两台手机上的微信版本不一样,所以有的元素的定位不一样,因此我们在这里进行区分
if(driver.getCapabilities().getCapability(“udid”).equals(“127.0.0.1:62001”)){
driver.findElement(By.xpath("//*[@text=‘大雄’]")).click();
//这个作为A先发送消息
driver.findElement(By.className(“android.widget.EditText”)).sendKeys(“你好”);
driver.findElement(By.xpath("//*[@text=‘发送’]")).click();
driver.pressKey(new KeyEvent(AndroidKey.BACK));//模拟安卓的返回
switchFlag=“TUP4C19104003285”;//输入完成以后讲切换变量设置为对方,意思是该对方输入了
//使用字典库的数量作为循环变量
int i=AChatContents.size();
while(i>0){
if(switchFlag.equals(“127.0.0.1:62001”)){
//先获取聊天的最后内容,因为聊天窗口中聊天内容无法获取,因此我们在聊天信息页获取和对方聊天的最后一条内容
String curContent=driver.findElement(By.xpath("//[@text=‘大雄’]/…/…/following-sibling::[1]/[1]/[1]")).getText();
driver.findElement(By.xpath("//*[@text=‘大雄’]")).click();
//根据对方回复的内容,我们去信息Map对象中去找对应的信息进行输入
driver.findElement(By.className(“android.widget.EditText”)).sendKeys(AChatContents.get(curContent));
driver.findElement(By.xpath("//*[@text=‘发送’]")).click();
driver.pressKey(new KeyEvent(AndroidKey.BACK));//模拟安卓的返回
switchFlag=“TUP4C19104003285”;//输入完成以后讲切换变量设置为对方,意思是该你输入了
i–;
}else{
Thread.sleep(2000);
}
}
}else{
//使用字典库的数量作为循环变量
int i=BChatContents.size();
while(i>0){
if(switchFlag.equals(“TUP4C19104003285”)){
//先获取聊天的最后内容,因为聊天窗口中聊天内容无法获取,因此我们在聊天信息页获取和对方聊天的最后一条内容,采用xpath定位
String curContent=driver.findElement(By.xpath("//[@text=‘七七’]/…/…/following-sibling::[1]/[1]/[1]")).getText();
driver.findElement(By.xpath("//*[@text=‘七七’]")).click();
//根据对方回复的内容,我们去信息Map对象中去找对应的信息进行输入
driver.findElement(By.className(“android.widget.EditText”)).sendKeys(BChatContents.get(curContent));
driver.findElement(By.xpath("//*[@text=‘发送’]")).click();
driver.pressKey(new KeyEvent(AndroidKey.BACK));//模拟安卓的返回
switchFlag=“127.0.0.1:62001”;//输入完成以后讲切换变量设置为对方,意思是该你输入了
i–;
}else{
Thread.sleep(2000);
}
}
}
}
@AfterClass
public void quit(){
driver.quit();
}
}
说在最后,自动化不仅可以用来测试,还可以用来自动化运营,比如自动发朋友圈、自动评论、点赞等等
作 者:Testfan 陌豆
出 处:微信公众号:自动化软件测试平台
版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接