Exemplo n.º 1
0
        /// <summary>
        /// Checks the text of the specified ResourceId for the specified text value.
        /// </summary>
        /// <param name="resourceId">The resource identifier.</param>
        /// <param name="text">The text to search for.</param>
        /// <returns>true if the text is equal.</returns>
        public bool ExistTextOnResourceId(string resourceId, string text)
        {
            UiSelector uiSelector = new UiSelector().ResourceId(resourceId);
            bool       exist      = _controller.GetText(uiSelector).Equals(text);

            return(exist);
        }
        /// <summary>
        /// Find <paramref name="toFind"/> while scrolling up <paramref name="list"/>
        /// </summary>
        /// <param name="list">list to scroll</param>
        /// <param name="toFind">UiSelector() of object to find</param>
        /// <param name="listScrollTimes">number of time to scroll the list. Default is 5</param>
        /// <param name="clickAfterFind">give true if want to click found object. Default is false</param>
        /// <returns>success and fail</returns>
        public bool FindOnListWithScroll(UiSelector list, string toFind, int listScrollTimes = 5, bool clickAfterFind = false)
        {
            // Wait until screen contains list for timeout sec.
            int previousTimeout = _linkUI.Controller.GetTimeout();

            _linkUI.Controller.SetTimeout(5);

            if (!_linkUI.Controller.DoesScreenContains(list))
            {
                throw new DeviceWorkflowException("Can not find list to scroll");
            }
            _linkUI.Controller.Swipe(list, SESLib.To.Down, 2);

            _linkUI.Controller.SetTimeout(0);

            for (int i = 0; i < listScrollTimes; i++)
            {
                if (_linkUI.Controller.DoesScreenContains(toFind))
                {
                    _linkUI.Controller.SetTimeout(previousTimeout);
                    if (clickAfterFind)
                    {
                        return(_linkUI.Controller.Click(toFind));
                    }
                    return(true);
                }
                _linkUI.Controller.Swipe(list, SESLib.To.Up, 50);
            }
            _linkUI.Controller.SetTimeout(previousTimeout);
            return(false);
        }
        /// <summary>
        /// Click <paramref name="toClick"/> while swiping <paramref name="list"/>
        /// </summary>
        /// <param name="list">list to swipe</param>
        /// <param name="toClick">string to click</param>
        /// <returns>success and fail</returns>
        public bool ClickOnListWithSwipe(UiSelector list, string toClick)
        {
            // Wait until screen contains list for timeout sec.
            if (!_linkUI.Controller.DoesScreenContains(list))
            {
                throw new DeviceWorkflowException("Can not find list to swipe");
            }

            int previousTimeout = _linkUI.Controller.GetTimeout();

            _linkUI.Controller.SetTimeout(0);
            bool result;

            for (int i = 0; i < 5; i++)
            {
                if (_linkUI.Controller.DoesScreenContains(toClick))
                {
                    result = _linkUI.Controller.Click(toClick);
                    _linkUI.Controller.SetTimeout(previousTimeout);
                    return(result);
                }
                _linkUI.Controller.Swipe(list, SESLib.To.Left, 50);
            }
            _linkUI.Controller.SetTimeout(previousTimeout);
            return(false);
        }
Exemplo n.º 4
0
        /// <summary>Waits for availability of the given text on the device for the up to the given time</summary>
        /// <param name="textTitle">The text title.</param>
        /// <param name="tsWait">The ts wait.</param>
        /// <returns>true if found</returns>
        public bool WaitForAvailableText(string textTitle, TimeSpan tsWait)
        {
            int timeOut = _controller.GetTimeout();

            _controller.SetTimeout(0);

            DateTime   dtWait     = DateTime.Now.AddSeconds(tsWait.TotalSeconds);
            UiSelector uiSelector = new UiSelector().TextContains(textTitle);
            bool       available  = _controller.DoesScreenContains(uiSelector);

            while (!available && dtWait > DateTime.Now)
            {
                Thread.Sleep(250);

                available = _controller.DoesScreenContains(uiSelector);

                double myTime = dtWait.Subtract(DateTime.Now).TotalSeconds;
                if (myTime % 5 == 0)
                {
                    _controller.PressKey(KeyCode.KEYCODE_WAKEUP);
                }
            }

            _controller.SetTimeout(timeOut);
            return(available);
        }
Exemplo n.º 5
0
        /// <summary>Waits for the given resource identifier to not be displayed on the device</summary>
        /// <param name="resourceId">The resource identifier.</param>
        /// <param name="tsWait">The time to wait.</param>
        /// <returns>true on success</returns>
        public bool WaitForNotDisplayedResourceId(string resourceId, TimeSpan tsWait)
        {
            int timeOut = _controller.GetTimeout();

            _controller.SetTimeout(0);

            DateTime   dtWait     = DateTime.Now.AddSeconds(tsWait.TotalSeconds);
            UiSelector uiSelector = new UiSelector().ResourceId(resourceId);
            bool       displaid   = _controller.DoesScreenContains(uiSelector);

            while (displaid && dtWait > DateTime.Now)
            {
                Thread.Sleep(250);

                displaid = _controller.DoesScreenContains(uiSelector);
                int myTime = (int)(dtWait.Subtract(DateTime.Now).TotalSeconds);
                if (myTime % 5 == 0)
                {
                    _controller.PressKey(KeyCode.KEYCODE_WAKEUP);
                }
            }

            _controller.SetTimeout(timeOut);
            return(!displaid);
        }
        /// <summary>
        /// Click <paramref name="toClick"/> while scrolling up <paramref name="list"/>
        /// </summary>
        /// <param name="list">list to scroll</param>
        /// <param name="toClick">UiSelector() of object to click</param>
        /// <param name="listScrollTimes">number of time to scroll the list. Default is 5</param>
        /// <returns>success and fail</returns>
        public bool ClickOnSequencialFileListWithScroll(UiSelector list, string toClick, int listScrollTimes = 5)
        {
            // Wait until screen contains list for timeout sec.
            if (!_linkUI.Controller.DoesScreenContains(list))
            {
                throw new DeviceWorkflowException("Can not find list to scroll");
            }

            int previousTimeout = _linkUI.Controller.GetTimeout();

            _linkUI.Controller.SetTimeout(0);
            for (int i = 0; i < listScrollTimes; i++)
            {
                if (_linkUI.Controller.DoesScreenContains(toClick))
                {
                    _linkUI.Controller.SetTimeout(previousTimeout);

                    return(_linkUI.Controller.Click(toClick));
                }
                _linkUI.Controller.Swipe(list, SESLib.To.Up, 50);
            }
            _linkUI.Controller.SetTimeout(previousTimeout);

            return(false);
        }
 public UiObject about()
 {
     if (about1 == null)
     {
         about1 = new UiSelector().text("ABOUT").makeUiObject();
     }
     return(about1);
 }
Exemplo n.º 8
0
 public UiObject sortByTime()
 {
     if (sortByTime1 == null)
     {
         sortByTime1 = new UiSelector().resourceID(Android.app.speedtest.packageID() + ":id/logo").makeUiObject();
     }
     return(sortByTime1);
 }
 public UiObject results()
 {
     if (results1 == null)
     {
         results1 = new UiSelector().text("RESULTS").makeUiObject();
     }
     return(results1);
 }
Exemplo n.º 10
0
 public UiObject sortByDownload()
 {
     if (sortByDownload1 == null)
     {
         sortByDownload1 = new UiSelector().resourceID(Android.app.speedtest.packageID() + ":id/downloadLayout").makeUiObject();
     }
     return(sortByDownload1);
 }
Exemplo n.º 11
0
 public UiObject sortByPing()
 {
     if (sortByPing1 == null)
     {
         sortByPing1 = new UiSelector().resourceID(Android.app.speedtest.packageID() + ":id/pingLayout").makeUiObject();
     }
     return(sortByPing1);
 }
Exemplo n.º 12
0
 public UiObject toolsButton()
 {
     if (toolsButton1 == null)
     {
         toolsButton1 = new UiSelector().resourceID(Android.app.speedtest.packageID() + ":id/toolsButton").makeUiObject();
     }
     return(toolsButton1);
 }
Exemplo n.º 13
0
 public UiObject download()
 {
     if (download1 == null)
     {
         download1 = new UiSelector().resourceID(Android.app.speedtest.packageID() + ":id/download").makeUiObject();
     }
     return(download1);
 }
Exemplo n.º 14
0
 public UiObject removeAdsButton()
 {
     if (removeAdsButton1 == null)
     {
         removeAdsButton1 = new UiSelector().text("Remove Ads").makeUiObject();
     }
     return(removeAdsButton1);
 }
Exemplo n.º 15
0
 public UiObject testAgainButton()
 {
     if (testAgainButton1 == null)
     {
         testAgainButton1 = new UiSelector().text("Test Again").makeUiObject();
     }
     return(testAgainButton1);
 }
Exemplo n.º 16
0
 public UiObject uploadSpeed()
 {
     if (uploadSpeed1 == null)
     {
         uploadSpeed1 = new UiSelector().resourceID(Android.app.speedtest.packageID() + ":id/uploadSpeed").makeUiObject();
     }
     return(uploadSpeed1);
 }
Exemplo n.º 17
0
 public UiObject termsOfUse()
 {
     if (termsOfUse1 == null)
     {
         termsOfUse1 = new UiSelector().description("Terms of Use").makeUiObject();
     }
     return(termsOfUse1);
 }
Exemplo n.º 18
0
 public UiObject logo()
 {
     if (logo1 == null)
     {
         logo1 = new UiSelector().description("Speedtest.net").makeUiObject();
     }
     return(logo1);
 }
Exemplo n.º 19
0
 public UiObject logo()
 {
     if (logo1 == null)
     {
         logo1 = new UiSelector().resourceID(Android.app.speedtest.packageID() + ":id/logo").makeUiObject();
     }
     return(logo1);
 }
Exemplo n.º 20
0
 public UiObject resultsLabel()
 {
     if (resultsLabel1 == null)
     {
         resultsLabel1 = new UiSelector().resourceID(Android.app.speedtest.packageID() + ":id/resultsCoutText").makeUiObject();
     }
     return(resultsLabel1);
 }
Exemplo n.º 21
0
 public UiObject settings()
 {
     if (settings1 == null)
     {
         settings1 = new UiSelector().text("SETTINGS").makeUiObject();
     }
     return(settings1);
 }
            public void CancelNewItemSelector(UiSelector selector)
            {
                Foley.PlayProgrammingMoveBack();

                if (selector == this.newItemSelector)
                {
                    newItemSelectorShim.Deactivate();
                }
            }   // end of EditObjectUpdateObj CancelNewItemSelector()
Exemplo n.º 23
0
        /// <summary>
        /// Finds a collection of elements in the screen that matches the UiAutomator criteria using a Parent UiSelector.
        /// </summary>
        /// <param name="selector"> Represents the Enum in Share class </param>
        /// <param name="text"> the partial/complete text of an element to be found </param>
        /// <param name="position"> position of an object on the layout hierarchy </param>
        public static IReadOnlyCollection <AndroidElement> CollectionByUiAutomatorParentSelector(Selector selector, string text, int position = 0)
        {
            GlobalVar.AndroidDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(GlobalVar.TimeSpan);
            IReadOnlyCollection <AndroidElement> elements            = null;
            var uiAutomator = new UiSelector().BuildParentSelector(selector, text, position);

            try
            {
                elements = GlobalVar.AndroidDriver.FindElementsByAndroidUIAutomator(uiAutomator);
            }
            catch (Exception ex)
            {
                Assert.Fail("GetControlsCollectionByUiAutomatorParentSelector threw an exception: " + ex.Message);
            }
            return(elements);
        }
Exemplo n.º 24
0
        // ************ DATE 10/16/2020 ************
        // All the possible Selectors to search for a parent element till date.
        // ************ --------------- ************
        #region USING PARENT SELECTORS


        /// <summary>
        /// Finds the first element in the screen that matches the UiAutomator criteria using a Parent UiSelector.
        /// </summary>
        /// <param name="selector"> Represents the Enum in Share class </param>
        /// <param name="value"> the boolean value of an element to be found </param>
        /// <param name="position"> position of an object on the layout hierarchy </param>
        public static AppiumWebElement ByUiAutomatorParentSelector(Selector selector, bool value, int position = 0)
        {
            GlobalVar.AndroidDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(GlobalVar.TimeSpan);
            AppiumWebElement element = null;
            var uiAutomator          = new UiSelector().BuildParentSelector(selector, value, position);

            try
            {
                element = GlobalVar.AndroidDriver.FindElementByAndroidUIAutomator(uiAutomator);
            }
            catch (Exception ex)
            {
                Assert.Fail("GetControlByUiAutomatorParentSelector threw an exception: " + ex.Message);
            }
            return(element);
        }
Exemplo n.º 25
0
        /// <summary>
        /// Assumes we are on the "My HP Roam Queue" page.  No perfomrance markers set here.
        /// </summary>
        private void SelectSingleJob()
        {
            UiSelector selector = new UiSelector();

            //First, deselect all jobs if Select All is on by default.
            if (_androidHelper.ExistTextOnResourceId(JobSelectToggle, "Deselect All"))
            {
                if (!_controller.Click(selector.ResourceId(JobSelectToggle)))
                {
                    throw new DeviceWorkflowException("Error deselecting all jobs in the queue.");
                }

                selector.Clear();
                //Select the first job in the queue
                if (!_controller.Click(selector.ResourceId("com.hp.roam:id/ready_selected_iv")))
                {
                    throw new NoJobsFoundException($"No jobs found in My HP Roam Queue for {_executionData.Credential.UserName}.");
                }
            }
        }
Exemplo n.º 26
0
        private void EnterPassword()
        {
            UiSelector passwordSelector = new UiSelector().ResourceId("password");
            string     passwordtext     = _controller.GetText(passwordSelector);

            if (string.IsNullOrEmpty(passwordtext))
            {
                OnStatusUpdate("Enter password.");
                if (!_controller.SetText(passwordSelector, Credential.Password))
                {
                    throw new DeviceWorkflowException("Failed to enter password.");
                }
            }

            //Get rid of the keyboard if present
            if (_controller.IsVirtualKeyboardShown().Value)
            {
                _controller.PressKey(KeyCode.KEYCODE_ESCAPE);
            }
        }
Exemplo n.º 27
0
        private void EnterUserName()
        {
            UiSelector userNameSelector = new UiSelector().ResourceId("username");
            string     userNametext     = _controller.GetText(userNameSelector);

            if (string.IsNullOrEmpty(userNametext))
            {
                OnStatusUpdate("Enter user name.");
                if (!_controller.SetText(userNameSelector, Credential.UserName))
                {
                    throw new DeviceWorkflowException("Failed to enter user name.");
                }
            }

            UiSelector rememberSelector = new UiSelector().ResourceId("RememberMe");

            if (!_controller.IsChecked(rememberSelector))
            {
                OnStatusUpdate("Set 'Remember Me' checkbox.");
                _controller.Click(rememberSelector);
            }
        }
Exemplo n.º 28
0
        /// <summary>Waits for one of the given resource ids to be displayed on the screen.</summary>
        /// <param name="resourceIdFirst">The resource identifier one.</param>
        /// <param name="resourceIdSecond">The resource identifier two.</param>
        /// <param name="tsWait">The ts wait.</param>
        /// <returns>true if one of the two is displayed</returns>
        public bool WaitForAvailableResourceIds(string resourceIdFirst, string resourceIdSecond, TimeSpan tsWait)
        {
            int        timeOut     = _controller.GetTimeout();
            DateTime   dtWait      = DateTime.Now.AddSeconds(tsWait.TotalSeconds);
            UiSelector uiSelector1 = new UiSelector().ResourceId(resourceIdFirst);
            UiSelector uiSelector2 = new UiSelector().ResourceId(resourceIdSecond);

            bool available = ExistResourceId(resourceIdFirst, resourceIdSecond);

            while (!available && dtWait > DateTime.Now)
            {
                Thread.Sleep(250);
                available = ExistResourceId(resourceIdFirst, resourceIdSecond);

                double myTime = dtWait.Subtract(DateTime.Now).TotalSeconds;
                if (myTime % 7 == 0)
                {
                    _controller.PressKey(KeyCode.KEYCODE_WAKEUP);
                }
            }

            _controller.SetTimeout(timeOut);
            return(available);
        }
            public void AddUISelector(List <GameObject> childList, out UiSelector uiSelector, bool ignorePaths)
            {
                //
                // Set up the pie menu for choosing new objects to add to the scene.
                //
                uiSelector = new PieSelector(null, "Sim.EditObjects.PickThing");

                // Size used for all items.
                Vector2 size = new Vector2(1.0f, 1.0f);

                // Boku
                var boku = ActorManager.GetActor("BokuBot");

                uiSelector.AddItem(new ActorMenuItem(uiSelector, boku.LocalizedName, boku.MenuTextureFile, boku, size, radialOffset));

                // Rover
                var rover = ActorManager.GetActor("Rover");

                uiSelector.AddItem(new ActorMenuItem(uiSelector, rover.LocalizedName, rover.MenuTextureFile, rover, size, radialOffset));

                // Fruit
                var fruit = ActorManager.GetActor("Fruit");

                uiSelector.AddItem(new ActorMenuItem(uiSelector, fruit.LocalizedName, fruit.MenuTextureFile, fruit, size, radialOffset));

                #region BotGroup1
                {
                    RenderObject group = new ActorMenuItem(uiSelector, null, @"Textures\Tiles\group.botsI", null, size, radialOffset);

                    UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickToken");

                    // move it out front
                    ITransform transformSelector = selectorGroup as ITransform;
                    transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem);
                    transformSelector.Compose();

                    selectorGroup.ComposeDefault += NewItemSelectorComposeDefault;
                    selectorGroup.Select         += SelectNewItemSelector;
                    selectorGroup.Cancel         += CancelNewItemSelector;

                    uiSelector.AddGroup(group, selectorGroup);

                    // bot group items

                    var actors = ActorManager.GetActorsInGroup("BotGroup1");
                    for (int i = 0; i < actors.Count; i++)
                    {
                        selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset));
                    }
                }
                #endregion

                #region BotGroup2
                // some might think a subroutine would be a better way to structure this...
                {
                    RenderObject group = new ActorMenuItem(uiSelector, null, @"Textures\Tiles\group.botsII", null, size, radialOffset);

                    UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickToken");

                    // move it out front
                    ITransform transformSelector = selectorGroup as ITransform;
                    transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem);
                    transformSelector.Compose();

                    selectorGroup.ComposeDefault += NewItemSelectorComposeDefault;
                    selectorGroup.Select         += SelectNewItemSelector;
                    selectorGroup.Cancel         += CancelNewItemSelector;

                    uiSelector.AddGroup(group, selectorGroup);

                    // bot group items
                    var actors = ActorManager.GetActorsInGroup("BotGroup2");
                    for (int i = 0; i < actors.Count; i++)
                    {
                        selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset));
                    }
                }
                #endregion

                #region objects group (star, coin, heart)
                {
                    RenderObject group = new ActorMenuItem(uiSelector, null, @"Textures\Tiles\group.objects", null, size, radialOffset);

                    UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickToken");

                    // move it out front
                    ITransform transformSelector = selectorGroup as ITransform;
                    transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem);
                    transformSelector.Compose();

                    selectorGroup.ComposeDefault += NewItemSelectorComposeDefault;
                    selectorGroup.Select         += SelectNewItemSelector;
                    selectorGroup.Cancel         += CancelNewItemSelector;

                    uiSelector.AddGroup(group, selectorGroup);


                    var actors = ActorManager.GetActorsInGroup("ObjectGroup");
                    for (int i = 0; i < actors.Count; i++)
                    {
                        selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset));
                    }
                }

                #endregion

                #region trees group
                // trees group
                //
                {
                    RenderObject group = new ActorMenuItem(uiSelector, null, @"filter.tree", null, size, radialOffset);

                    UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickTree");

                    // move it out front
                    ITransform transformSelector = selectorGroup as ITransform;
                    transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem);
                    transformSelector.Compose();

                    selectorGroup.ComposeDefault += NewItemSelectorComposeDefault;
                    selectorGroup.Select         += SelectNewItemSelector;
                    selectorGroup.Cancel         += CancelNewItemSelector;

                    uiSelector.AddGroup(group, selectorGroup);

                    // Trees group items
                    var actors = ActorManager.GetActorsInGroup("TreeGroup");
                    for (int i = 0; i < actors.Count; i++)
                    {
                        selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset));
                    }
                }
                #endregion

                #region pipe group
                {
                    RenderObject group = new ActorMenuItem(uiSelector, null, @"filter.pipe", null, size, radialOffset);

                    UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickPipe");

                    // move it out front
                    ITransform transformSelector = selectorGroup as ITransform;
                    transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem);
                    transformSelector.Compose();

                    selectorGroup.ComposeDefault += NewItemSelectorComposeDefault;
                    selectorGroup.Select         += SelectNewItemSelector;
                    selectorGroup.Cancel         += CancelNewItemSelector;

                    uiSelector.AddGroup(group, selectorGroup);

                    // Trees group items
                    var actors = ActorManager.GetActorsInGroup("PipeGroup");
                    for (int i = 0; i < actors.Count; i++)
                    {
                        selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset));
                    }
                }
                #endregion

                #region underwater group
                // underwater group
                //
                {
                    RenderObject group = new ActorMenuItem(uiSelector, null, @"filter.underwater", null, size, radialOffset);

                    UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickUnderwater");

                    // move it out front
                    ITransform transformSelector = selectorGroup as ITransform;
                    transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem);
                    transformSelector.Compose();

                    selectorGroup.ComposeDefault += NewItemSelectorComposeDefault;
                    selectorGroup.Select         += SelectNewItemSelector;
                    selectorGroup.Cancel         += CancelNewItemSelector;

                    uiSelector.AddGroup(group, selectorGroup);

                    // Trees group items
                    var actors = ActorManager.GetActorsInGroup("UnderwaterGroup");
                    for (int i = 0; i < actors.Count; i++)
                    {
                        selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset));
                    }
                }
                #endregion

                #region rock group
                // rock group
                //
                {
                    var          rock  = ActorManager.GetActor("Rock");
                    RenderObject group = new ActorMenuItem(uiSelector, rock.LocalizedName, @"filter.rock", null, size, radialOffset);

                    UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickRock");

                    // move it out front
                    ITransform transformSelector = selectorGroup as ITransform;
                    transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem);
                    transformSelector.Compose();

                    selectorGroup.ComposeDefault += NewItemSelectorComposeDefault;
                    selectorGroup.Select         += SelectNewItemSelector;
                    selectorGroup.Cancel         += CancelNewItemSelector;

                    uiSelector.AddGroup(group, selectorGroup);

                    // Trees group items
                    var actors = ActorManager.GetActorsInGroup("RockGroup");
                    for (int i = 0; i < actors.Count; i++)
                    {
                        selectorGroup.AddItem(new ActorMenuItem(selectorGroup, actors[i].LocalizedName, actors[i].MenuTextureFile, actors[i], size, groupRadialOffset));
                    }
                }
                #endregion

                // WayPoint
                #region waypoint group
                if (!ignorePaths)
                {
                    RenderObject group = new ActorMenuItem(uiSelector, null, @"Textures\Tiles\modifier.waypointwhite", null, size, radialOffset);

                    UiSelector selectorGroup = new PieSelector(group, "Sim.EditObjects.PickToken");

                    ITransform transformSelector = selectorGroup as ITransform;
                    transformSelector.Local.Translation = new Vector3(0.0f, 0.0f, sizeMenuItem);
                    transformSelector.Compose();

                    selectorGroup.ComposeDefault += NewItemSelectorComposeDefault;
                    selectorGroup.Select         += SelectNewItemSelector;
                    selectorGroup.Cancel         += CancelNewItemSelector;

                    uiSelector.AddGroup(group, selectorGroup);

                    selectorGroup.AddItem(new ActorMenuItem(selectorGroup, Strings.Localize("actorNames.pathGeneric"), @"filter.pathplain", null, size, radialOffset));
                    selectorGroup.AddItem(new ActorMenuItem(selectorGroup, Strings.Localize("actorNames.pathRoad"), @"filter.pathroad", null, size, radialOffset));
                    selectorGroup.AddItem(new ActorMenuItem(selectorGroup, Strings.Localize("actorNames.pathWall"), @"filter.pathwall", null, size, radialOffset));
                    selectorGroup.AddItem(new ActorMenuItem(selectorGroup, Strings.Localize("actorNames.pathVeggie"), @"filter.pathflora", null, size, radialOffset));

                    //uiSelector.AddItem(new ActorMenuItem(uiSelector, Strings.Localize("actorNames.wayPoint"), null, @"modifier.waypointwhite", null, size, radialOffset));

                    // move the selector into position
                    {
                        //ITransform transformSelector = uiSelector as ITransform;
                        //transformSelector.Local.RotationY = MathHelper.ToRadians(14.0f);
                        //transformSelector.Local.RotationX = MathHelper.ToRadians(14.0f);
                        //transformSelector.Compose();
                    }
                    // Add the selector to the child list.
                }
                #endregion waypoint group

                uiSelector.ComposeDefault += NewItemSelectorComposeDefault;
                uiSelector.Select         += SelectNewItemSelector;
                uiSelector.Cancel         += CancelNewItemSelector;
                childList.Add(uiSelector);
            }   // end of AddUISelector()
 /// <summary>
 /// Click <paramref name="toClick"/> while scrolling up <paramref name="list"/>
 /// </summary>
 /// <param name="list">list to scroll</param>
 /// <param name="toClick">UiSelector() of object to click</param>
 /// <param name="listScrollTimes">number of time to scroll the list. Default is 5</param>
 /// <returns>success and fail</returns>
 public bool ClickOnListWithScroll(UiSelector list, string toClick, int listScrollTimes = 5)
 {
     return(FindOnListWithScroll(list, toClick, listScrollTimes, true));
 }