/// <summary>
        /// Change the Instagram account biography
        /// </summary>
        private AutomationResult ChangeBiography(string bio)
        {
            _logger.LogInformation($"Update biography: {bio}");
            try
            {
                _driver
                .FindElement(By.Id("com.instagram.android:id/profile_tab"))
                .Click();

                _driver
                .FindElement(By.Id("com.instagram.android:id/coordinator_root_layout"))
                .FindElements(By.ClassName("android.widget.Button"))
                .First(x => x.Text.ToLower().Contains("edit profile"))
                .Click();

                FindElement(By.Id("com.instagram.android:id/bio")).Click();
                FindElement(By.Id("com.instagram.android:id/caption_edit_text")).Clear();
                FindElement(By.Id("com.instagram.android:id/caption_edit_text")).SendKeys(bio);
                FindElement(By.XPath(@"//android.widget.ViewSwitcher[@content-desc=""Done""]/android.widget.ImageView")).Click();
                FindElement(By.XPath(@"//android.widget.ViewSwitcher[@content-desc=""Done""]/android.widget.ImageView")).Click();

                return(AutomationResult.Ok());
            }
            catch (Exception e)
            {
                return(AutomationResult.Error(e.Message));
            }
        }
        private AutomationResult ChangeFullName(string fullname)
        {
            _logger.LogInformation($"Update fullname: {fullname}");

            try
            {
                _driver
                .FindElement(By.Id("com.instagram.android:id/profile_tab"))
                .Click();

                _driver
                .FindElement(By.Id("com.instagram.android:id/coordinator_root_layout"))
                .FindElements(By.ClassName("android.widget.Button"))
                .First(x => x.Text.ToLower().Contains("edit profile"))
                .Click();

                FindElement(By.Id("com.instagram.android:id/full_name")).Click();
                FindElement(By.Id("com.instagram.android:id/full_name")).FindElement(By.ClassName("android.widget.EditText")).Clear();
                FindElement(By.Id("com.instagram.android:id/full_name")).FindElement(By.ClassName("android.widget.EditText")).SendKeys(fullname);
                // _appium.Driver.FindElement(By.Id("com.instagram.android:id/caption_edit_text")).Clear();
                // _appium.Driver.FindElement(By.Id("com.instagram.android:id/caption_edit_text")).SendKeys(fullname);
                FindElement(By.XPath(@"//android.widget.ViewSwitcher[@content-desc=""Done""]/android.widget.ImageView")).Click();

                Console.ReadLine();
                FindElement(By.XPath(@"//android.widget.ViewSwitcher[@content-desc=""Done""]/android.widget.ImageView")).Click();

                return(AutomationResult.Ok());
            }
            catch (Exception e)
            {
                return(AutomationResult.Error(e.Message));
            }
        }
        /// <summary>
        /// Create an Instagram account
        /// </summary>
        /// <param name="record"></param>
        /// <exception cref="Exception">If the program crash</exception>
        private AutomationResult RegisterAccount(InstagramAccountInformation record)
        {
            try
            {
                // var multiLogin = FindElements(By.Id("com.google.android.gms:id/credential_picker_layout"));
                // if (multiLogin.Any())
                //     FindElement(By.Id("com.google.android.gms:id/cancel")).Click();

                var signupCta = FindElements(By.Id("com.instagram.android:id/sign_up_with_email_or_phone"));
                _logger.LogInformation($"Is setup CTA is present? {signupCta.Any()}");
                if (signupCta.Any())
                {
                    signupCta.First().Click();
                    FindElement(By.Id("com.instagram.android:id/right_tab")).Click();

                    FindElement(By.Id("com.instagram.android:id/email_field")).SendKeys(record.Email);
                    FindElement(By.Id("com.instagram.android:id/right_tab_next_button")).Click();

                    // is already existing account

                    var confirmationCode = GetConfirmationCode(record.Email, record.Password);
                    if (confirmationCode.IsNull())
                    {
                        throw new Exception("Unable to get confirmation code");
                    }

                    FindElement(By.Id("com.instagram.android:id/confirmation_code")).SendKeys(confirmationCode);
                    FindElement(By.Id("com.instagram.android:id/next_button")).Click();

                    FindElement(By.Id("com.instagram.android:id/full_name")).SendKeys(record.Fullname);
                    FindElement(By.Id("com.instagram.android:id/password")).SendKeys(record.Password);
                    FindElement(By.Id("com.instagram.android:id/remember_password_checkbox")).Click();
                    FindElement(By.Id("com.instagram.android:id/continue_without_ci")).Click();

                    FindElement(By.Id("com.instagram.android:id/next_button")).Click();
                    FindElement(By.Id("com.instagram.android:id/primary_button")).Click();
                    FindElement(By.Id("com.instagram.android:id/add_age_link")).Click();

                    FindElement(By.Id("com.instagram.android:id/entered_age")).SendKeys(record.Age);
                    FindElement(By.Id("com.instagram.android:id/next_button")).Click();

                    FindElement(By.Id("com.instagram.android:id/change_username")).Click();
                    FindElement(By.Id("com.instagram.android:id/username")).SendKeys(record.Username);
                    FindElement(By.Id("com.instagram.android:id/next_button")).Click();

                    FindElement(By.Id("com.instagram.android:id/skip_button")).Click();
                    // FindElement(By.Id("com.instagram.android:id/skip_button")).Click();
                    FindElement(By.Id("com.instagram.android:id/negative_button")).Click();
                    FindElement(By.Id("com.instagram.android:id/skip_button")).Click();
                    FindElement(By.Id("com.instagram.android:id/action_bar_button_action")).Click();

                    return(AutomationResult.Ok());
                }
                return(AutomationResult.Error("Unable to found the signup CTA"));
            }
            catch (Exception e)
            {
                return(AutomationResult.Error(e.Message));
            }
        }
        /// <summary>
        /// Renew the IP of the 4G proxy
        /// </summary>
        private AutomationResult RenewIp()
        {
            var client   = new RestClient($"https://hypeproxy.io/api/Utils/DirectRenewIp/{ProxyId}");
            var request  = new RestRequest(Method.GET);
            var response = client.Execute(request);

            if (response.IsSuccessful)
            {
                _logger.LogInformation($"Successfully renewed IP, new IP: {GetCurrentIp()}");
                return(AutomationResult.Ok());
            }
            else
            {
                _logger.LogError("Unable to renew IP");
                return(AutomationResult.Error("Unable to renew the IP"));
            }
        }
        /// <summary>
        /// Set account profile picture
        /// </summary>
        /// <param name="profilePicture">A valid http(s) jpg or png link</param>
        private AutomationResult ChangeProfilePicture(string profilePicture)
        {
            _logger.LogInformation($"Update profile picture: {profilePicture}");

            try
            {
                var extension  = new FileInfo(profilePicture).Extension.Replace(".", "");
                var photoBytes = new WebClient().DownloadData(profilePicture);

                // TODO: Check if the path is always the same
                _driver.PushFile($"/storage/emulated/0/DCIM/Camera/{Guid.NewGuid()}.{(string.IsNullOrWhiteSpace(extension) ? "jpg" : extension)}", photoBytes);

                _driver
                .FindElement(By.Id("com.instagram.android:id/profile_tab"))
                .Click();

                _driver
                .FindElement(By.Id("com.instagram.android:id/coordinator_root_layout"))
                .FindElements(By.ClassName("android.widget.Button"))
                .First(x => x.Text.ToLower().Contains("edit profile"))
                .Click();

                FindElement(By.Id("com.instagram.android:id/change_avatar_button")).Click();

                var hasActionSheetOpened = _driver.FindElement(By.Id("com.instagram.android:id/action_sheet_header_text_view")).Displayed;
                if (hasActionSheetOpened)
                {
                    _logger.LogInformation("First profile picture upload");
                    FindElement(By.XPath(@"/hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout[2]/android.widget.FrameLayout[2]/android.widget.FrameLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.view.ViewGroup/androidx.recyclerview.widget.RecyclerView/android.widget.TextView[1]")).Click();
                }
                else
                {
                    _logger.LogInformation("Profile picture upload");
                    FindElement(By.XPath("/hierarchy/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.ListView/android.widget.FrameLayout[1]")).Click();
                }
                FindElement(By.Id("com.instagram.android:id/next_button_textview")).Click();
                FindElement(By.Id("com.instagram.android:id/next_button_textview")).Click();

                return(AutomationResult.Ok());
            }
            catch (Exception e)
            {
                return(AutomationResult.Error(e.Message));
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Executes the command.
        /// </summary>
        /// <param name="command">The command.</param>
        /// <param name="request">The request.</param>
        /// <returns></returns>
        public IAutomationResult ExecuteCommand(CommandType command, IAutomationRequest request)
        {
            var retval = new AutomationResult();

            switch (command)
            {
            case CommandType.LaunchApplications:
                ApplicationLauncher.ProcessInformation procInfo;
                //var logonInfo = new ApplicationLauncher.LogOnDetails() {Domain = "Obi-wan", Password = "******", UserName = "******"};
                //ApplicationLauncher.Current.StartProcessInteractively(new ProcessStartInfo("calc.exe"), out procInfo /*, logonInfo */);
                ApplicationLauncher.Current.StartProcessInteractively(request, out procInfo /*, logonInfo */);

                break;
            }



            //////////////////////////////

            return(retval);
        }
Ejemplo n.º 7
0
 public void Finish(AutomationResult result)
 {
     _result = result;
     _state = AutomationState.Done;
 }