谢谢打开这篇文章的每个你

测开之分层自动化(Python)招生简章

Python自动化测试报告美化

在python中进行数据驱动测试

太嚣张了!他竟用Python绕过了“验证码”

在网络世界里你不知道对面和你聊天的是人是鬼,是男是女,是胖是瘦,也许他们只是一堆脚本。

本文将通过自动化的手段,模拟微信聊天,同时也给大家提供IM的UI自动化测试中,对于聊天应该如何处理的思路。

采用工具为appium服务端1.10.1,java-client版本6.1.0,实现思路如下

1. 使用appium脚本+testng配置文件同时驱动两台手机设备,启动两个服务端

testng配置文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<suite name="Suite" parallel="tests" thread-count="2">

<test name="127.0.0.1:62001">

<parameter name="udid" value="127.0.0.1:62001"/>

<parameter name="port" value="4490"/>

<parameter name="sysPort" value="8201"/>

<classes>

<class name="com.testfan.testcases.WXChat"/>

</classes>

</test>

<test name="TUP4C19104003285">

<parameter name="udid" value="TUP4C19104003285"/>

<parameter name="port" value="4491"/>

<parameter name="sysPort" value="8202"/>

<classes>

<class name="com.testfan.testcases.WXChat"/>

</classes>

</test>

</suite>

2. 脚本中对微信聊天进行定位及操作,并且完成互相轮流发送信息的代码

以下是脚本实现:

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<AndroidElement> driver;

static String switchFlag="";//两个手机上的账户切换变量

HashMap<String, String> AChatContents=new HashMap<>();//A设备的聊天字典

HashMap<String, String> BChatContents=new HashMap<>();//B设备的聊天字典

@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);

}

/**

* 交互聊天思路

* 1. A、B两台设备,udid分别为A:127.0.0.1:62001,B:TUP4C19104003285

* 2. beforeclass中对AChatContents、BChatContents进行了初始化,分别代表A和B对话的信息数据Map对象

* 3. 对话中A先发送信息,再轮B,使用switchFlag变量来切换两个手机交替发送信息

* 4. 每次拿到对方发送的信息就去对话的信息数据Map里找对应的信息进行回复

* 5. 本实例并没有做断言

* @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();

}

}

3. 执行testng的配置文件,最后结果如下:

说在最后,自动化不仅可以用来测试,还可以用来自动化运营,比如自动发朋友圈、自动评论、点赞等等

作  者:Testfan 陌豆

出  处:微信公众号:自动化软件测试平台

版权说明:欢迎转载,但必须注明出处,并在文章页面明显位置给出文章链接

android聊天界面对话气泡_你在和脚本谈恋爱(自动化在IM聊天中的应用)相关推荐

  1. android聊天界面对话气泡_聊天会话框气泡(示例代码)

    1.聊天会话框气泡的实现 我们将一个div的width.height.font-size设置为0,给它一个border-width值,border-color给定四种不同的颜色,此时我们会看到该div ...

  2. android聊天界面对话气泡_android 模仿QQ聊天气泡 入门级示例源码

    [实例简介] [实例截图] [核心代码] package com.study.androidtest; import java.util.ArrayList; import android.app.A ...

  3. Android 聊天界面对话

    转载请注明出处:http://blog.csdn.net/htwhtw123/article/details/77510010 实现Android 聊天界面对话 ,可以设计成接受到的消息在左显示,发送 ...

  4. iOS 类似微信,QQ聊天界面的气泡聊天简单实现Demo

    以下是YYKit组件的源码分析,高级性能优化相关都在里面可以找到 YYwebImage超细源码分析 YYImage超细源码分析 YYModel源码分析YYText源码分析 12.27日更新:分析了一个 ...

  5. C++ Qt 实现微信聊天界面、气泡消息、gif斗图、表情包

    目录 聊天界面设计 QWebEngineView的使用 发送消息 demo源码链接 在使用Qt开发项目时,如果有气泡消息的需求,那将是很麻烦的事情,相比其它控件的自定义,气泡消息比较复杂,例如下图: ...

  6. 怎么主动发起话题_谈恋爱怎样找话题聊天?

    在谈恋爱的时候,最常见的问题就是不知道聊什么? 比如,找不到话题一直尬聊,又或者没聊几句就聊死,有些虽然天天在聊,但关系却原地踏步,毫无进展. 所以,今天这篇文章会给大家分享一些比较常见而且实用的聊天 ...

  7. Qt+html+JavaScript实现类似QQ聊天界面的气泡效果

    这是一个简单的类似QQ聊天界面的Demo,用Qt实现,在QWebView里嵌入网页的方式实现.先看效果图: 无论怎样,我觉得自己动手写出来的东西才是自己的,所以源码不全,重点的代码我会放上来.只是模拟 ...

  8. android 登录界面开源代码_【程序源代码】一个安卓查询类app制作的开源项目

    " 关键字:工作流 框架 springboot" 正文:一个学习安卓查询类app制作的开源项目.可以用来联系查询类app的编写. 01 - android studio最近势头好猛 ...

  9. Android(安卓)一个简单的聊天界面的实现(eclipse实现)

    这几天刚刚学习一下安卓的编程,尝试制作了一个简单的聊天界面(还没有实现网络等后续功能)软件界面如图.(使用eclipse实现) 当输入一些内容后,聊天界面可以下拉显示更多的聊天信息,如下图 首先对这个 ...

最新文章

  1. 在request.GET中捕获url参数
  2. 拜托,面试别再问我表达式求值了!!!
  3. 太吾绘卷存档修改2020_太吾绘卷/神级初始存档
  4. Leetcode题库234.回文链表(递归 类似双指针 c实现)
  5. ios15之把自己编写的框架上传到CocoaPods里面
  6. LVS——DR模式+Keepalived(高可用)
  7. nftables入门文档
  8. 枚举如何设置空白_2019-07-04 用VBA设置word中shape对象相对位置
  9. 下标随着页面链接的跳转
  10. 【微信小程序】flex布局
  11. python dataframe的某一列变为list_手把手教你用Python爬中国电影票房数据
  12. 金融反欺诈常用特征处理方法
  13. The IMAP server replied to the 'EXAMINE' command with a 'NO' response: EXAMINE Unsafe Login.
  14. 《简明python教程》笔记一
  15. 个人晋升演讲ppt_关于升职演讲ppt演讲范文及制作要求
  16. Python优雅技巧
  17. Android 圆形图片 CircleImageView(Xfermode方式)
  18. 如果你只知道开心网,那你就OUT了。。。。。
  19. linux 快速删除大文件夹
  20. 南昌大专计算机学校有哪些,江西南昌单招大专学校有哪些学校

热门文章

  1. 你能说出 Kafka 这些原理吗?
  2. GitHub 官方终于出 App 了!iPhone 用户可抢先体验
  3. 互联网始于 50 年前的 3420 室
  4. 华为方舟编译器 PK 微软苹果谷歌编译器,到底谁胜出?
  5. 百元价位的水下相机?!1000个去海边的人有900个选择了它!
  6. 为什么我们选择 Flutter 开发移动应用?
  7. 程序员都该懂的 UML 规范!
  8. 高通 AI、5G 争夺战!
  9. 编程语言流行指数:Python 稳居宝座,Java 滑坡!
  10. 再见 SIM 卡,你好 eSIM !华为回应不上市;熊猫直播正式关停 | 极客头条