// 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.")); }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }