Пример #1
0
        // Get list of child elements based on selector from parent and return element in index
        public static AndroidElement GetChildElementFromList(AndroidElement parent, SelectBy by, string selector, int index)
        {
            AndroidElement e = null;

            switch (by)
            {
            case SelectBy.ID:
                e = (AndroidElement)parent.FindElementsById(selector)[index];
                break;

            case SelectBy.Class:
                e = (AndroidElement)parent.FindElementsByClassName(selector)[index];
                break;

            case SelectBy.XPath:
                e = (AndroidElement)parent.FindElementsByXPath(selector)[index];
                break;

            case SelectBy.ExactText:
                e = (AndroidElement)parent.FindElementsByAndroidUIAutomator(String.Format("new UiSelector().text(\"{0}\")", selector)).ElementAt(index);
                break;

            case SelectBy.ContainsText:
                e = (AndroidElement)parent.FindElementsByAndroidUIAutomator(String.Format("new UiSelector().textContains(\"{0}\")", selector)).ElementAt(index);
                break;

            case SelectBy.RegexText:
                e = (AndroidElement)parent.FindElementsByAndroidUIAutomator(String.Format("new UiSelector().textMatches(\"{0}\")", selector)).ElementAt(index);
                break;
            }
            return(e ?? throw new NotFoundException("Child with selector " + selector + " not found."));
        }
Пример #2
0
        public ReadOnlyCollection <AndroidElement> GetElementsByClassName(AndroidElement parentElement, string className, bool errorNone)
        {
            DateTime startTime = DateTime.Now;

            while ((DateTime.Now - startTime).TotalMilliseconds < OperateTimeout)
            {
                Thread.Sleep(StatusCheckInterval);
                ReadOnlyCollection <AppiumWebElement> allChildElements = parentElement.FindElementsByClassName(className);
                if (allChildElements.Count > 0)
                {
                    List <AndroidElement> elements = new List <AndroidElement>();
                    foreach (AppiumWebElement element in allChildElements)
                    {
                        elements.Add((AndroidElement)element);
                    }
                    return(new ReadOnlyCollection <AndroidElement>(elements));
                }
            }
            if (errorNone)
            {
                throw new Exception("GetElementsByClassNameAndText获取元素超时, className=" + className);
            }
            else
            {
                return(null);
            }
        }
Пример #3
0
        public AndroidElement GetElementByClassNameAndText(AndroidElement parentElement, string className, string[] texts, bool fullMatch, bool andCondition, bool errorNone)
        {
            DateTime startTime = DateTime.Now;

            while ((DateTime.Now - startTime).TotalMilliseconds < OperateTimeout)
            {
                Thread.Sleep(StatusCheckInterval);
                ReadOnlyCollection <AppiumWebElement> elements = parentElement.FindElementsByClassName(className);
                if (elements.Count > 0)
                {
                    foreach (AndroidElement element in elements)
                    {
                        if (CheckElementContainText(element, texts, andCondition))
                        {
                            return(element);
                        }
                    }
                }
            }
            if (errorNone)
            {
                string allText = CommonUtil.StringArrayToString(texts, ",");
                throw new Exception("GetElementByClassNameAndText获取元素超时, className=" + className + ", text = " + allText);
            }
            else
            {
                return(null);
            }
        }
Пример #4
0
        private string GetListPersonElementText(AndroidAppAccess appAccess, AndroidElement listLElement)
        {
            try
            {
                StringBuilder    textBuilder  = new StringBuilder();
                AppiumWebElement nameLElement = listLElement.FindElementByClassName("android.widget.LinearLayout");
                if (nameLElement != null)
                {
                    AppiumWebElement nameElement = nameLElement.FindElementByClassName("android.widget.TextView");
                    if (nameElement != null)
                    {
                        ReadOnlyCollection <AppiumWebElement> propertyElements = listLElement.FindElementsByClassName("android.widget.TextView");
                        for (int i = 0; i < propertyElements.Count; i++)
                        {
                            textBuilder.AppendLine();
                            textBuilder.Append(propertyElements[i].Text.Trim());
                        }
                        return(textBuilder.ToString());
                    }
                }

                return(null);
            }
            catch (Exception ex)
            {
                //总是莫名其妙报错
                return(null);
            }
        }
Пример #5
0
        private void GotoShopSkuPage(AndroidAppAccess appAccess, string shopWebPageUrl, string shopName)
        {
            //点击后进入查询页面
            AndroidElement gotoInputElement = appAccess.GetElementById("com.taobao.taobao:id/home_searchedit", true);

            gotoInputElement.Click();

            //选择店铺选项卡
            AndroidElement shopTabElement = appAccess.GetElementById("com.taobao.taobao:id/search_tab_layout", true);

            shopTabElement.FindElementsByClassName("android.support.v7.app.ActionBar$Tab")[2].Click();

            //录入店铺名称
            AndroidElement inputShopUrlElement = appAccess.GetElementById("com.taobao.taobao:id/searchEdit", true);

            inputShopUrlElement.SendKeys(shopName);

            //查询按钮,点击后应该进入店铺页面
            AndroidElement searchShopBtnElement = appAccess.GetElementById("com.taobao.taobao:id/searchbtn", true);

            searchShopBtnElement.Click();

            try
            {
                ReadOnlyCollection <AndroidElement> shopListViewElements = appAccess.GetElementsById("com.taobao.taobao:id/shopTitle", true);

                if (shopListViewElements.Count > 0)
                {
                    AndroidElement shopElement = shopListViewElements[0];
                    if (shopElement.Text.Trim() == shopName)
                    {
                        shopElement.Click();

                        try
                        {
                            AndroidElement mainMenuTabContainerElement = appAccess.GetElementById("com.taobao.taobao:id/tl_tabs", true);
                            mainMenuTabContainerElement.FindElementsByClassName("android.support.v7.app.ActionBar$Tab")[1].Click();
                        }
                        catch (Exception ex)
                        {
                            throw new Exception("未成功获取'全部宝贝'按钮, shopName = " + shopName + ", shopUrl = " + shopWebPageUrl);
                        }
                    }
                    else
                    {
                        throw new Exception("没有搜索到此店铺,第一个匹配项不是此店铺. shopName = " + shopName);
                    }
                }
                else
                {
                    throw new Exception("没有搜索到此店铺,关键字匹配0个店铺. shopName = " + shopName);
                }
            }
            catch (Exception ex)
            {
                throw new Exception("没有搜索到此店铺. shopName = " + shopName, ex);
            }
        }
Пример #6
0
        private List <AppiumWebElement> GetCategoryElement(string name)
        {
            AndroidElement categoryMainPageElement = AppAccess.GetElementByClassNameAndText("android.widget.TextView", new string[] { "首页" }, true, true, true);

            categoryMainPageElement.Click();

            AndroidElement categoryMenuElement = AppAccess.GetElementByClassNameAndText("android.widget.TextView", new string[] { "生鲜分类" }, true, true, true);

            categoryMenuElement.Click();

            AndroidElement listElement = AppAccess.GetElementByXPath("//android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout", false);
            //ReadOnlyCollection<AndroidElement> allC3Elements = AppAccess.GetElementsByXPath("//android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.ListView/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.GridView/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.TextView", false);
            ReadOnlyCollection <AppiumWebElement> allC3Elements = listElement.FindElementsByClassName("android.widget.TextView");
            List <AppiumWebElement> foundElements = new List <AppiumWebElement>();

            for (int i = 0; i < allC3Elements.Count; i++)
            {
                AppiumWebElement element = allC3Elements[i];
                if (element.Text == name)
                {
                    foundElements.Add(element);

                    /*
                     * if (i + 3 >= allC3Elements.Count)
                     * {
                     *  return GetCategoryElementAfterFound(name);
                     * }
                     * else
                     * {
                     *  return element;
                     * }*/
                }
            }
            if (foundElements.Count > 0)
            {
                return(foundElements);
            }

            try
            {
                try
                {
                    Size winSize = AppAccess.GetWindowSize();
                    AppAccess.Swipe(new Point(300, 600),
                                    new Point(300, 300),
                                    1000);
                }
                catch (Exception ex1)
                {
                }
                Thread.Sleep(1000);
                return(this.GetCategoryElement(name));
            }
            catch (Exception ex)
            {
                throw new Exception("找不到分类元素, name = " + name, ex);
            }
        }
Пример #7
0
        private List <AppiumWebElement> GetCategoryElementAfterFound(string name)
        {
            //出现过找到元素了,但是点击不到的情况,那么再滑屏一下,使得元素暴露的更明显
            try
            {
                AppAccess.Swipe(new Point(300, 600),
                                new Point(300, 10),
                                2000);
            }
            catch (Exception ex)
            {
                //出错,但是界面看起来没问题,所以忽略了
            }
            AndroidElement categoryMainPageElement = AppAccess.GetElementByClassNameAndText("android.widget.TextView", new string[] { "首页" }, true, true, true);

            categoryMainPageElement.Click();

            AndroidElement categoryMenuElement = AppAccess.GetElementByClassNameAndText("android.widget.TextView", new string[] { "生鲜分类" }, true, true, true);

            categoryMenuElement.Click();
            AndroidElement listElement = AppAccess.GetElementByXPath("//android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout", false);
            //ReadOnlyCollection<AndroidElement> allC3Elements = AppAccess.GetElementsByXPath("//android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.ListView/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.GridView/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.TextView", false);
            ReadOnlyCollection <AppiumWebElement> allC3Elements = listElement.FindElementsByClassName("android.widget.TextView");
            List <AppiumWebElement> foundElements = new List <AppiumWebElement>();

            foreach (AppiumWebElement element in allC3Elements)
            {
                if (element.Text == name)
                {
                    foundElements.Add(element);
                }
            }
            if (foundElements.Count == 0)
            {
                throw new Exception("GetCategoryElementAfterFound执行出错!");
            }
            else
            {
                return(foundElements);
            }
        }
Пример #8
0
        public AndroidElement GetElementByClassNameAndIndex(AndroidElement parentElement, string className, int index, bool errorNone)
        {
            DateTime startTime = DateTime.Now;

            while ((DateTime.Now - startTime).TotalMilliseconds < OperateTimeout)
            {
                Thread.Sleep(StatusCheckInterval);
                ReadOnlyCollection <AppiumWebElement> elements = parentElement.FindElementsByClassName(className);
                if (elements != null && elements.Count > index)
                {
                    return((AndroidElement)elements[index]);
                }
            }
            if (errorNone)
            {
                throw new Exception("GetElementByClassNameAndIndex获取元素超时, className = " + className + ", index = " + index.ToString());
            }
            else
            {
                return(null);
            }
        }