通过id定位
安卓里面的id即为resource-id
driver.findElementById("com.tencent.mm:id/do")
或者
WebElement element = driver.findElement(By.id("com.tencent.mm:id/do"));
通过name定位
一般text为name
WebElement el = driver.findElement(By.name("昵称"));
通过classname定位
Classname即为uiautomator里面的class信息
WebElement el = driver.findElement(By.ClassName("android.widget.TextView"));
通过xpath定位
在appium中xpath定位元素,执行很慢,效率比较低,很少用
WebElement el = driver.findElement(By.xpath("//android.widget.Button[@index='1']"));
通过accessibilityID定位
在uiautomator中的content-desc信息为该定位元素
WebElement el = driver.findElementByAccessibilityId("sharebutton");
通过androiduiautomator定位元素
AndroidUIAutomator是一个强有力的元素定位方式,它是通过Android UIAutomator类库去找元素,
findElement(By.AndroidUIAutomator(String UIAuto));
可以选项id,classname,name,description作为传入的字符串
WebElement el = driver.findElementByAndroidUIAutomator("new UiSelector().description("sharebutton")");
Text属性的方法,uiautomator中的text信息
driver.find_element_by_android_uiautomator('new UiSelector().text("Custom View")').click() #text
driver.find_element_by_android_uiautomator('new UiSelector().textContains("View")').click() #textContains
driver.find_element_by_android_uiautomator('new UiSelector().textStartsWith("Custom")').click() #textStartsWith
没有endswith方法
driver.find_element_by_android_uiautomator('new UiSelector().textMatches("^Custom.*")').click() #textMatches
使用正则表达式必须完全匹配,比如上面使用”^Custom”是不正确的
classname属性的方法
#className
driver.find_element_by_android_uiautomator('new UiSelector().className("android.widget.TextView").text("Custom View")').click()
#classNameMatches
driver.find_element_by_android_uiautomator('new UiSelector().classNameMatches(".*TextView$").text("Custom View")').click()
resourceID属性的方法
#resourceId
driver.find_element_by_android_uiautomator('new UiSelector().resourceId("android:id/text1")')
#resourceIdMatches
driver.find_element_by_android_uiautomator('new UiSelector().resourceIdMatches(".*id/text1$")')
通过contentdescription定位
driver.find_element_by_android_uiautomator('new UiSelector().description("Custom View")').click()
driver.find_element_by_android_uiautomator('new UiSelector().desctiptionContains("View")').click()
driver.find_element_by_android_uiautomator('new UiSelector().descriptionStartsWith("Custom")').click()
driver.find_element_by_android_uiautomator('new UiSelector().descriptionMatches("^Custom.*")').click()
元素的其他属性的方法
driver.find_element_by_android_uiautomator('new UiSelector().clickable(true).text("Custom View")').click()
通过伪xpath方法
通过UiSelector.fromParent或UiObject.getFromParent方法
快速查找已知元素的父元素的兄弟信息
他们的功能是一样的
Getfromparent方法
- save = new UiObject(new UiSelector().text("Save"));
- assertEquals(save.getText(),"Save");
- delete = save.getFromParent(new UiSelector().text("Delete"));
- assertEquals(delete.getText(),"Delete");
promparent方法
- delete = new UiObject(new UiSelector().text("Save").fromParent(new UiSelector().text("Delete")));
- assertEquals(delete.getText(),"Delete");
通过UiSelector.childSelector或UiObject.getChild方法
快速查找在已知元素的子元素
Getchild方法
- UiObject parentView = new UiObject(new UiSelector().className("android.view.View"));
- save = parentView.getChild(new UiSelector().text("Save"));
- assertEquals(save.getText(),"Save");
childselector方法
- save = new UiObject(new UiSelector().className("android.view.View").childSelector(new UiSelector().text("Save")));
- assertEquals(save.getText(),"Save");