Windows环境下使用uiautomatorviewer进行元素定位

发布日期:2019-03-25

一、摘要

元素定位本篇主要介绍如何使用uiautomatorviewer,通过定位到页面上的元素,然后进行相应的点击等操作uiautomatorviewer 是 android-sdk 自带的一个元素定位工具,非常简单好用,使用 uiautomatorviewer,你可以检查一个应用的 UI 来查看应用的布局和组件以及相关的属性

在WIndows系统上进行元素定位,建议使用这个工具,在Mac上建议用Appium Inspector

二、启动uiautomatorviewer.bat

双击启动

三、链接手机

确认连接手机状态正常-》打开手机qq页面,让屏幕处于点亮状态

点左上角安卓机器人按钮 Devices Screenshot 按钮刷新页面

四、定位元素

五、点击登录按钮代码实例

如上图所示,定位了登陆按钮,代码实例如下

# python"""@Time : 2018/11/12 13:37@Author : @Email : @File : @Software: PyCharm@Description:"""# encoding = utf-8from appium import webdriverimport timeimport unittestclass test_ClickButon(unittest.TestCase):def setUp(self): desired_caps = {"platformName": "Android" "deviceName": "30d4e606" "platformVersion": "5.0" "appPackage": "com.tencent.qqpimsecure" "appActivity": "com.tencent.server.fore.QuickLoadActivity" }self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub" desired_caps)def test_ClickButton(self): driver = self.driver driver.find_element_by_id("com.tencent.mobileqq:id/btn_login").click() time.sleep(5)

1 // Java 2 package testscript/* 3 * @FileName testscript.Test_Calculator: 4 * @author davieyang 5 * @create 2018-11-20 11:02 6 */ 7 import org.apache.log4j.xml.DOMConfigurator 8 import java.net.MalformedURLException 9 import java.net.URL10 import java.util.concurrent.TimeUnit11 12 import org.openqa.selenium.By13 import org.openqa.selenium.remote.DesiredCapabilities14 import org.testng.Assert15 import org.testng.annotations.BeforeTest16 import org.testng.annotations.DataProvider17 import org.testng.annotations.Test18 19 import io.appium.java_client.android.AndroidDriver20 21 public class Test_Calculator {22 static {23 //指定log4j配置文件为log4j.xml24 DOMConfigurator.configure("log4j.xml")25 }26 AndroidDriver driver27 @BeforeTest28 public void setUp() throws MalformedURLException{29 DesiredCapabilities caps = new DesiredCapabilities()30 // des.setCapability("app" "c:")31 caps.setCapability("automationname" "Appium")32 caps.setCapability("platformName" "Android")33 caps.setCapability("platformVersion" "23")34 caps.setCapability("udid" "WTKDU17105005171")35 caps.setCapability("deviceName" "Honor")36 caps.setCapability("appPackage" "com.tencent.qqpimsecure")//com.android.contacts37 caps.setCapability("appActivity" "com.tencent.server.fore.QuickLoadActivity")//.activities.PeopleActivity38 caps.setCapability("appWaitActivity" "com.tencent.server.fore.QuickLoadActivity")39 caps.setCapability("unicodeKeyboard" "True")40 caps.setCapability("resetKeyboard" "True")41 caps.setCapability("newCommandTimeout" "15")42 caps.setCapability("nosign" "True")43 driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub")caps)44 driver.manage().timeouts().implicitlyWait(10 TimeUnit.SECONDS)45 }46 @Test47 public void add() {48 driver.findElement(By.xpath("com.tencent.mobileqq:id/btn_login")).click()49 }

六、Finding Elements By ID

 

WebElement digit_5 = driver.findElement(By.id("com.android.calculator2:id/digit5"))

七、Finding Elements By Name

WebElement delete = driver.findElement(By.name("DELETE"))

八、Finding Elements By CLASSNAME

WebElement editBox = driver.findElement(By.className("android.widget.EditText"))

If the same class is used for multiple elements then we need to select an element on the basic of indexing. For example:

List<WebElement>editBox = driver.findElements(By.className("android.widget.Button"))

editBox.get(1).click()

九、Finding Elements By AccessibilityID

WebElement plusSign=driver.findElementByAccessibilityId("plus")

 十、Finding Elements By AndroidUIAutomator

findElement(By.AndroidUIAutomator(String UIAuto))

WebElement equal = driver.findElementByAndroidUiAutomator("new UiSelector().resourceId("com.android.calculator2:id/equal")")

WebElement equal = driver.findElementByAndroidUiAutomator("new UiSelector().description("equals")")

 十一、其他定位方式