Example #1
0
        /// <summary>
        /// 单个手机发群消息
        /// </summary>
        /// <param name="viewModel"></param>
        /// <param name="wmPoint"></param>
        public void SendMessageToGroup(WXActionViewModel viewModel)
        {
            //获取当前手机的分辨率
            var wmPoint = _baseAction.GetWMSize(viewModel.Device);

            _baseAction.UnlockSingleScreen(viewModel.Device);

            OpenWX(viewModel.Device);

            ////右边的加号
            _baseAction.actionDirectStr(viewModel.Device, 700, 100, wmPoint);

            ///点击发起群聊
            _baseAction.actionDirectStr(viewModel.Device, 680, 200, wmPoint);

            //检测是否进入发起群聊  会一直检测
            _baseAction.CircleDetection("SelectContactUI", viewModel.Device, false);

            ///点击选择一个群
            _baseAction.actionDirectStr(viewModel.Device, 400, 360, wmPoint);

            //检测是否进入选择群聊界面  会一直检测
            _baseAction.CircleDetection("GroupCardSelectUI", viewModel.Device, false);

            ///分析页面布局
            _baseAction.CreatUIXML(new WXActionViewModel()
            {
                Device = viewModel.Device, XMLName = "groupChatList"
            }, (o, doc) =>
            {
                return(AnalysisGroupChatList(o, doc));
            });
        }
Example #2
0
        public void FromDetailPageToValidatePage(WXActionViewModel viewModel, Action <bool> currentAction = null, WMPoint wmPoint = null)
        {
            var isSuccess = true;

            ///可以执行下去
            if (!viewModel.IsGoOn)
            {
                return;
            }
            ///点击添加到通讯录按钮 或者 验证通过按钮
            _baseAction.InitProcessWithTaskState(viewModel.Device, string.Format("shell input tap {0} {1}", (viewModel.LeftWidth + viewModel.RightWidth) / 2, (viewModel.TopHeight + viewModel.BottomHeight) / 2));

            ///检测是直接变成好友 还是进入验证页面
            var isContinueing = true;

            while (isContinueing)
            {
                var list = _baseAction.InitProcessWithTaskState(viewModel.Device, " shell dumpsys window | grep mCurrentFocus", true);

                if (null == list || list.Count == 0)
                {
                    isSuccess = false;

                    isContinueing = false;
                }

                ///检测是否进入验证页面
                if (string.Join("|", list).Contains("SayHiWithSnsPermissionUI"))
                {
                    isSuccess = true;

                    isContinueing = false;
                }

                ///检测是否直接变成 发送消息
                else
                {
                    var returnData = _baseAction.CreatUIXML(viewModel, (o, doc) => { return(CheckIsTurnDirectlyNewFriend(doc)); });

                    ///表示 就是直接变成发消息  不用验证
                    if (returnData.IsValidatedState)
                    {
                        isSuccess = false;

                        isContinueing = false;
                    }
                }
            }

            if (isSuccess)
            {
                ///进入的是打招呼界面
                isSuccess = EnterSayHelloActivity(viewModel, wmPoint);

                if (null != currentAction)
                {
                    currentAction.Invoke(isSuccess);
                }
            }
        }
Example #3
0
        /// <summary>
        /// 查看当天打过招呼的好友的状态
        /// </summary>
        public WXActionViewModel DeleteFriend(WXActionViewModel viewModel)
        {
            var model = _baseAction.CreatUIXML(viewModel, (o, doc) =>
            {
                ///表示添加 或者 接受  按钮
                var currentModel1280 = doc.SelectSingleNode("//node[contains(@bounds,'[584,383][704,443]')]");
                var currentModel1920 = doc.SelectSingleNode("//node[contains(@bounds,'[876,559][1056,649]')]");
                var innerXml         = string.Empty;

                Action <string> func = (xml) =>
                {
                    if (xml.Contains("添加") || xml.Contains("接受"))
                    {
                        o.IsValidatedState = true;
                    }

                    else
                    {
                        var firstIndex = innerXml.IndexOf("?");

                        var lastIndex = innerXml.LastIndexOf("?");

                        if ((lastIndex - firstIndex) == 1)
                        {
                            o.IsValidatedState = true;
                        }
                    }
                };

                if (currentModel1280 != null)
                {
                    innerXml = currentModel1280.InnerXml;
                    func(innerXml);
                }
                else if (currentModel1920 != null)
                {
                    innerXml = currentModel1920.InnerXml;
                    func(innerXml);
                }
                else
                {
                    o.IsValidatedState = false;
                }

                return(o);
            });

            return(model);
        }
Example #4
0
        /// <summary>
        /// 单个加好友
        /// </summary>
        public void SingleAddFriend(WXActionViewModel viewModel)
        {
            //获取当前手机的分辨率
            var wmPoint = _baseAction.GetWMSize(viewModel.Device);

            EnterNewFriendPageAction(viewModel, wmPoint);

            ///搜索
            if (viewModel.IsSearch)
            {
                AddFriendWithSearch(viewModel, wmPoint);
            }
            else
            {
                AddFriendWithContracts(viewModel, wmPoint);
            }
        }
Example #5
0
        /// <summary>
        /// 检测设备中是否有新朋友
        /// </summary>
        public IList <string> CheckEquipmentIsHaveNewsFriend()
        {
            var devices = _baseAction.Devices;

            var equipmentDevices = new Lazy <List <string> >();

            var taskList = new Lazy <List <Task> >();

            if (null == devices || devices.Count == 0)
            {
                return(default(List <string>));
            }


            foreach (var device in devices)
            {
                var task = Task.Factory.StartNew(() =>
                {
                    var currentViewModel = new WXActionViewModel()
                    {
                        Device = device
                    };

                    var wmPoint = _baseAction.GetWMSize(device);

                    EnterNewFriendPageAction(new WXActionViewModel()
                    {
                        Device = device
                    }, wmPoint);

                    currentViewModel = IsHaveNewFriend(currentViewModel);

                    if (currentViewModel.IsValidatedState)
                    {
                        equipmentDevices.Value.Add(device);
                    }
                });

                taskList.Value.Add(task);
            }


            Task.WaitAll(taskList.Value.ToArray());

            return(equipmentDevices.Value);
        }
Example #6
0
        /// <summary>
        /// 分析 打招呼页面 XML文档
        /// </summary>
        public WXActionViewModel ValiDateSayHelloPage(XmlDocument doc, WXActionViewModel viewModel)
        {
            var node     = doc.SelectSingleNode("//node[contains(@bounds,'[24,146][696,228]')]");
            var node1920 = doc.SelectSingleNode("//node[contains(@bounds,'[36,204][1044,326]')]");
            var bounds   = string.Empty;

            if (null == node && node1920 == null)
            {
                viewModel.IsValidatedState = false;

                return(viewModel);
            }

            if (node == null)
            {
                node = node1920;
            }

            ///验证申请 设置备注 填入备注
            XmlNodeList nodeList = node.ParentNode.ParentNode.ChildNodes;

            var text = node.Attributes["text"].Value;

            ///打招呼
            if (text.Length == 15)
            {
                viewModel.IsValidatedState = true;

                bounds = nodeList[2].ChildNodes[0].Attributes["bounds"].Value;
            }
            else
            {
                viewModel.IsValidatedState = false;

                bounds = nodeList[1].ChildNodes[0].Attributes["bounds"].Value;
            }

            viewModel = _baseAction.GetStartBoundsWithEndBounds <WXActionViewModel>(viewModel, bounds, (o) =>
            {
                return(o);
            });

            return(viewModel);
        }
Example #7
0
        /// <summary>
        /// 单条判断通讯录是否有好友
        /// </summary>
        /// <returns></returns>
        public WXActionViewModel IsHaveNewFriend(WXActionViewModel viewModel)
        {
            viewModel.XMLName = "isHaveNewFriend";

            var model = _baseAction.CreatUIXML(viewModel, (o, doc) =>
            {
                Func <XmlNode> _pointFunc = () =>
                {
                    return(doc.SelectSingleNode("//node[contains(@bounds,'[116,539][340,583]')]"));
                };

                Func <XmlNode> _textFunc = () =>
                {
                    return(doc.SelectSingleNode("//node[@text='添加手机联系人']"));
                };

                if (null != _pointFunc.Invoke() || null != _textFunc.Invoke())
                {
                    o.IsValidatedState = false;
                }
                else
                {
                    o.IsValidatedState = true;
                }

                return(o);
            });

            ///记录设备新朋友状态
            Task.Factory.StartNew(() =>
            {
                SingleHepler <NewFriendStateBLL> .Instance.SaveChange(new NewFriendStateViewModel()
                {
                    Device = viewModel.Device, IsImportContracts = false, IsHaveNewFriend = model.IsValidatedState
                });
            });


            return(model);
        }
Example #8
0
        /// <summary>
        /// 添加好友添加纪录
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="viewModel"></param>
        public void AddFriendInfoRecord(WXActionViewModel viewModel)
        {
            Task.Factory.StartNew(() =>
            {
                //XmlNode nickNode = doc.SelectSingleNode("//node[contains(@bounds,'[204,214]') and contains(@resource-id,'com.tencent.mm:id')]");

                var nick = string.Empty;

                SingleHepler <AddFriendInfoRecordBLL> .Instance.Insert(new AddFriendInfoRecord()
                {
                    CreateDate = DateTime.Now,

                    DataSource = viewModel.RemarkContent,

                    Nick = nick,

                    Sex = Convert.ToInt32(viewModel.Sex),

                    Device = viewModel.Device
                });
            });
        }
Example #9
0
        //进入新朋友页面
        public void EnterNewFriendPageAction(WXActionViewModel viewModel, WMPoint wmPoint = null)
        {
            _baseAction.UnlockSingleScreen(viewModel.Device);

            OpenWX(viewModel.Device, wmPoint);

            //viewModel.PullNativePath = string.Format(@"{0}\{1}", SingleHepler<ConfigInfo>.Instance.CutImageFileUrl, viewModel.Device);

            ////通讯录
            _baseAction.actionDirectStr(viewModel.Device, 300, 1180, wmPoint);

            Thread.Sleep(2000);

            ////新朋友
            _baseAction.actionDirectStr(viewModel.Device, 100, 230, wmPoint);

            //检测是否进入新的朋友界面
            var isSuccess = _baseAction.CircleDetection("FMessageConversationUI", viewModel.Device);

            if (!isSuccess)
            {
                return;
            }
        }
Example #10
0
        /// <summary>
        /// 加好友之前 进行检测
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="viewModel"></param>
        /// <returns></returns>
        public WXActionViewModel BeforeAddFriendWithValidate(XmlDocument doc, WXActionViewModel viewModel)
        {
            #region 进行检测

            var sex = EnumCheckSexType.Other;

            XmlNodeList nodeList = doc.SelectNodes("//node[@class='android.widget.Button']");

            XmlNode clickBtn = null;

            if (null != nodeList && nodeList.Count > 0)
            {
                var currenNode = nodeList[0];

                var textValue = currenNode.Attributes["text"].Value;

                ///回复
                if (textValue.Length == 2)
                {
                    var secondNode = nodeList[1];

                    textValue = secondNode.Attributes["text"].Value;

                    ///通过验证
                    if (textValue.Length == 4)
                    {
                        clickBtn = secondNode;
                    }
                }
                ///通过验证  添加到通讯录
                else if (textValue.Length == 4 || textValue.Length == 6)
                {
                    clickBtn = currenNode;
                }
            }

            XmlNode sexNode = doc.FirstChild;

            if (viewModel.Sex != EnumCheckSexType.Other)
            {
                // resource-id="com.tencent.mm:id/ad_" class="android.widget.ImageView"
                var personInfoNode = doc.SelectSingleNode("//node[contains(@bounds,'[204,214]')]");

                if (null != personInfoNode)
                {
                    sexNode = personInfoNode.LastChild;

                    var text = sexNode.Attributes["content-desc"].Value;

                    var bounds = sexNode.Attributes["bounds"].Value;

                    ///表示不是乱码
                    if (!text.Equals("?"))
                    {
                        sex = text.Equals("男") ? EnumCheckSexType.Man : (text.Equals("女") ? EnumCheckSexType.Woman : EnumCheckSexType.NoSex);
                    }
                    else
                    {
                        var currentModel = ValidateSexWithColorPoint(viewModel.Device, bounds);

                        sex = currentModel.Sex;
                    }
                }

                //只加男的 并且 当前好有也是男的  或者   ///只加女的 并且当前好友也是女的
                if (!(viewModel.Sex == EnumCheckSexType.Man && sex == EnumCheckSexType.Man) &&
                    !(viewModel.Sex == EnumCheckSexType.Woman && sex == EnumCheckSexType.Woman) &&
                    !(viewModel.Sex == EnumCheckSexType.NoMan && (sex == EnumCheckSexType.NoSex || sex == EnumCheckSexType.Woman)) &&
                    !(viewModel.Sex == EnumCheckSexType.NoWoman && (sex == EnumCheckSexType.NoSex || sex == EnumCheckSexType.Man))
                    )
                {
                    sexNode = null;
                }
            }

            ///记录添加新朋友记录
            if (null != clickBtn)
            {
                AddFriendInfoRecord(new WXActionViewModel()
                {
                    Device = viewModel.Device, RemarkContent = viewModel.RemarkContent, Sex = (EnumCheckSexType)sex
                });
            }

            ///别人有回复 则放弃这个朋友
            if (null == sexNode || null == clickBtn)
            {
                viewModel.IsGoOn = false;
            }
            else
            {
                var strValue = clickBtn.Attributes["bounds"].Value;

                viewModel = _baseAction.GetStartBoundsWithEndBounds <WXActionViewModel>(viewModel, strValue, (o) =>
                {
                    return(o);
                });
            }


            return(viewModel);

            #endregion
        }
Example #11
0
        /// <summary>
        /// 统计粉丝数
        /// </summary>
        /// <param name="viewModel"></param>
        public void StatisticsFriendCount(WXActionViewModel viewModel, WMPoint wmPoint)
        {
            _baseAction.UnlockSingleScreen(viewModel.Device);

            OpenWX(viewModel.Device);

            ////通讯录
            _baseAction.actionDirectStr(viewModel.Device, 300, 1180, wmPoint);

            ///点击 #
            var y = 1060;

            if (!string.IsNullOrEmpty(viewModel.Device) && viewModel.Device.Length <= 8)
            {
                y += _baseAction.DValue;
            }

            _baseAction.actionDirectStr(viewModel.Device, 700, y, wmPoint);

            //viewModel.PullNativePath = string.Format(@"{0}\{1}", SingleHepler<ConfigInfo>.Instance.CutImageFileUrl, viewModel.Device);

            viewModel.XMLName = "recordUI";

            while (string.IsNullOrEmpty(viewModel.FriendCountStr))
            {
                ///滑动进入到页面最低端
                _baseAction.InitProcessWithTaskState(viewModel.Device, "shell input swipe 100 1000 100  -10000");

                ///获取通讯录页面的XML文档
                viewModel = _baseAction.CreatUIXML(viewModel, (o, doc) =>
                {
                    XmlNode callOnNode1 = doc.SelectSingleNode("//node[contains(@bounds,'[0,1060]')]");
                    XmlNode callOnNode2 = doc.SelectSingleNode("//node[contains(@text,'位联系人')]");

                    if (callOnNode1 != null)
                    {
                        callOnNode1      = callOnNode1.LastChild;
                        o.FriendCountStr = GetFansCountByStr(callOnNode1.InnerXml);
                    }
                    else if (null != callOnNode2)
                    {
                        var value = callOnNode2.Attributes["text"].Value;

                        if (!string.IsNullOrEmpty(value))
                        {
                            o.FriendCountStr = Regex.Match(value, @"(\d+)").Value;
                        }
                    }

                    return(o);
                });

                Thread.Sleep(500);
            }

            Task.Factory.StartNew(() =>
            {
                SingleHepler <DeviceToNickNameBLL> .Instance.UpDateFriendCount(new DeviceToNickNameViewModel()
                {
                    Device = viewModel.Device, FriendCount = int.Parse(viewModel.FriendCountStr)
                });
            });
        }
Example #12
0
        /// <summary>
        /// 通过联系人加好友
        /// </summary>
        /// <param name="viewModel"></param>
        public void AddFriendWithContracts(WXActionViewModel viewModel, WMPoint wmPoint)
        {
            var y = 443;

            var i = 1;

            var isValidate = false;

            var stateStr = string.Empty;

            var isSuccess = false;

            viewModel.XMLName = "deleteAddedFriend";

            while (i <= viewModel.AddCount)
            {
                ///检测设备是否处于连接状态
                if (_baseAction.CheckEquipmentIsConnecting(viewModel.Device))
                {
                    return;
                }

                stateStr = string.Empty;

                isSuccess = false;

                var returnModel = IsHaveNewFriend(viewModel);

                if (!returnModel.IsValidatedState)
                {
                    return;
                }


                returnModel = DeleteFriend(viewModel);

                if (!returnModel.IsValidatedState)
                {
                    ///长按当前新朋友
                    _baseAction.actionDirectSwipStr(viewModel.Device, 100, y, 100, y, wmPoint);

                    ///删除当前新朋友
                    _baseAction.actionDirectStr(viewModel.Device, 360, 640, wmPoint);
                }

                else
                {
                    #region 加好友

                    _baseAction.actionDirectStr(viewModel.Device, 100, y, wmPoint);

                    //检测是否进入详细资料
                    isSuccess = _baseAction.CircleDetection("ContactInfoUI", viewModel.Device);

                    if (!isSuccess)
                    {
                        return;
                    }

                    viewModel.IsGoOn = true;

                    viewModel.XMLName = "DetailUI";

                    viewModel = _baseAction.CreatUIXML(viewModel, (o, doc) => { return(BeforeAddFriendWithValidate(doc, o)); });

                    ///页面过渡的时候检测
                    FromDetailPageToValidatePage(viewModel, (o) =>
                    {
                        if (o)
                        {
                            i++;
                        }
                    }, wmPoint);

                    //点击去除不必要的弹框
                    // _baseAction.InitProcessWithTaskState(viewModel.Device, "shell input tap 360 100");

                    //返回到新朋友
                    _baseAction.actionDirectStr(viewModel.Device, 50, 100, wmPoint);

                    //检测是否进入新朋友界面
                    isSuccess = _baseAction.CircleDetection("FMessageConversationUI", viewModel.Device);

                    if (isSuccess)
                    {
                        ///长按当前新朋友
                        _baseAction.actionDirectSwipStr(viewModel.Device, 100, y, 100, y, wmPoint);

                        ///删除当前新朋友
                        _baseAction.actionDirectStr(viewModel.Device, 360, 640, wmPoint);
                    }


                    #endregion
                }
            }
        }
Example #13
0
        /// <summary>
        /// 通过搜索加好友
        /// </summary>
        /// <param name="viewModel"></param>
        public void AddFriendWithSearch(WXActionViewModel viewModel, WMPoint wmPoint)
        {
            var searchContentList = viewModel.SearchContents;

            if (null == searchContentList || searchContentList.Count == 0)
            {
                return;
            }

            ///点击添加朋友
            _baseAction.actionDirectStr(viewModel.Device, 700, 100, wmPoint);

            ///是否进入添加朋友界面
            var isSuccess = _baseAction.CircleDetection("AddMoreFriendsUI", viewModel.Device);

            if (!isSuccess)
            {
                return;
            }

            //点击搜索框
            _baseAction.actionDirectStr(viewModel.Device, 360, 250, wmPoint);

            ///是否进入搜索界面
            isSuccess = _baseAction.CircleDetection("FTSAddFriendUI", viewModel.Device);

            if (!isSuccess)
            {
                return;
            }

            foreach (var searchContent in searchContentList)
            {
                viewModel.IsGoOn = true;

                viewModel.XMLName = "DetailUI";

                ///检测设备是否处于连接状态
                if (_baseAction.CheckEquipmentIsConnecting(viewModel.Device))
                {
                    break;
                }

                ///清空输入框
                _baseAction.actionDirectStr(viewModel.Device, 700, 100, wmPoint);

                ///输入搜索内容
                _baseAction.InitProcessWithTaskState(viewModel.Device, "shell am broadcast -a ADB_INPUT_TEXT --es msg '" + searchContent + "'");

                ///点击搜索按钮
                _baseAction.actionDirectStr(viewModel.Device, 360, 200, wmPoint);

                //检测是否进入详细资料
                isSuccess = _baseAction.CircleDetection("ContactInfoUI", viewModel.Device);

                if (!isSuccess)
                {
                    continue;
                }

                viewModel = _baseAction.CreatUIXML(viewModel, (o, doc) => { return(BeforeAddFriendWithValidate(doc, o)); });

                FromDetailPageToValidatePage(viewModel, wmPoint: wmPoint);

                //返回
                _baseAction.actionDirectStr(viewModel.Device, 50, 100, wmPoint);
            }
        }
Example #14
0
        /// <summary>
        /// 分析群聊中的群列表面
        /// </summary>
        /// <param name="viewModel"></param>
        /// <param name="doc"></param>
        /// <returns></returns>
        public WXActionViewModel AnalysisGroupChatList(WXActionViewModel viewModel, XmlDocument doc)
        {
            XmlNodeList nodeList = doc.SelectNodes("//node[@class='android.widget.TextView'][@index='1']");

            return(new WXActionViewModel());
        }
Example #15
0
        /// <summary>
        /// 进入打招呼页面
        /// </summary>
        public bool EnterSayHelloActivity(WXActionViewModel viewModel, WMPoint wmPoint = null)
        {
            #region 分析 打招呼页面 XML文档

            viewModel.XMLName = "SayHelloPage";

            Action <int, int> _currentAction = (x, y) =>
            {
                _baseAction.actionDirectStr(viewModel.Device, x, y, wmPoint);
            };

            Action <string> _currentInputContentAction = (content) =>
            {
                _baseAction.InitProcessWithTaskState(viewModel.Device, "shell am broadcast -a ADB_INPUT_TEXT --es msg '" + content + "'");
            };

            //_currentAction.Invoke(650, 240);

            _currentAction.Invoke(650, 240);

            var currentViewModel = _baseAction.CreatUIXML(viewModel, (o, doc) => { return(ValiDateSayHelloPage(doc, o)); });

            ///表示是要发送验证申请的
            if (currentViewModel.IsValidatedState)
            {
                _currentInputContentAction(viewModel.SayHiContent);

                ///设置备注文本框获取焦点
                _currentAction.Invoke(650, 465);

                //删除默认备注
                _currentAction.Invoke(650, 465);
            }

            if (!string.IsNullOrEmpty(viewModel.RemarkContent))
            {
                ///输入备注
                _currentInputContentAction(viewModel.RemarkContent);
            }
            else
            {
                ///点击 填入 按钮  输入备注
                _currentAction.Invoke(viewModel.RightWidth - 30, viewModel.BottomHeight - 15);
            }

            #endregion

            ///向上滑动 防止出现通知
            _baseAction.InitProcessWithTaskState(viewModel.Device, " shell input swipe 100 100 600  100");

            //发送
            _baseAction.actionDirectStr(viewModel.Device, 700, 100, wmPoint);

            //检测是否进入详细资料 有可能对方删除或者拉黑了我  会出现验证失败  不会自动返回详细资料页面
            var isSuccess = _baseAction.CircleDetection("ContactInfoUI", viewModel.Device, false);

            if (!isSuccess)
            {
                //返回
                _baseAction.actionDirectStr(viewModel.Device, 50, 100, wmPoint);
            }

            return(isSuccess);
        }