appium元素定位

幼敏悟过人,读书辄成诵。这篇文章主要讲述appium元素定位相关的知识,希望能为你提供帮助。
通过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方法
  1. save  =    new  UiObject(new  UiSelector().text("Save"));    
  2. assertEquals(save.getText(),"Save");    
  3. delete  =  save.getFromParent(new  UiSelector().text("Delete"));    
  4. assertEquals(delete.getText(),"Delete");  
promparent方法
  1. delete  =  new  UiObject(new  UiSelector().text("Save").fromParent(new  UiSelector().text("Delete")));    
  2. assertEquals(delete.getText(),"Delete");    
通过UiSelector.childSelector或UiObject.getChild方法
【appium元素定位】快速查找在已知元素的子元素
Getchild方法
  1. UiObject  parentView  =  new  UiObject(new  UiSelector().className("android.view.View"));    
  2. save  =  parentView.getChild(new  UiSelector().text("Save"));    
  3. assertEquals(save.getText(),"Save");    
childselector方法
  1. save  =  new  UiObject(new  UiSelector().className("android.view.View").childSelector(new  UiSelector().text("Save")));    
  2. assertEquals(save.getText(),"Save");  





    推荐阅读