- 微信公众号小程序一般基于前端APPH5,前后分离或不分离;自动化回归中基于appium不够稳定,基于web测试脚本更加稳定且效率更高;
实际中会遇到些问题,如微信授权,页面元素渲染效果差无法获取元素,接口间依赖参数不易获取等;
- 微信授权问题:模拟微信授权,httpclient添加请求头User-Agent模拟微信授权
CloseableHttpClient httpclient = HttpClients.createDefault();
String url="http://XXX";
HttpPost httppost = new HttpPost(url);
HashMap<String ,String> postHeader = new HashMap<String, String>();
postHeader.put("User-Agent","Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; GT-S5660 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/4.5.255");
postHeader.put("Referer","http://wxopen.dev.choicesaas.cn/oauth2/authorize/appidXXX?scope=snsapi_userinfo");
- APPH5使用浏览器打开页面元素渲染效果差,部分元素无法获取,可通过浏览器开发者模式模拟手机
打开开发者模式
Robot robot = new Robot();
robot.keyPress(KeyEvent.VK_F12);
robot.keyRelease(KeyEvent.VK_F12);
模拟手机
Robot robots = new Robot();
robots.keyPress(KeyEvent.VK_CONTROL);
robots.keyPress(KeyEvent.VK_SHIFT);
robots.keyPress(KeyEvent.VK_M);
- 遇到前后端不分离的程序,通过jsoup包获取js中对象属性值Document document = Jsoup.parse(result);
Document document = Jsoup.parse(responseResult);
/*取得script下面的JS变量*/
Elements e = document.getElementsByTag("script").eq(11);
Elements tag = document.getElementsByTag("script");
Element element2 = tag.get(tag.size()-1);
String[] data2 = element2.data().toString().split("var");
/*循环遍历script下面的JS变量*/
for (Element element : e) {
/*取得JS变量数组*/
String[] data = element.data().toString().split("var");
int flag=0;
for(String variable : data){
/*过滤variable为空的数据*/
if(variable.contains("=")){
if(flag==0) {
/*取到满足条件的JS变量*/
if(variable.contains("serviceData") ){
flag=1;
String[] kvp = variable.split("=");
//根据id截取
String[] split = kvp[5].split("id: '").split("outTradeNo: '");
String extend=split[1];//0599d621deec4e7fb02c51e4f267cc58//outTradeNo: '
String ext=split[1];//outTradeNo: '
outTradeNo=ext.substring(0, 26);
System.err.println(outTradeNo);
}
}