Appium-Android元素定位方式
2017-01-20 17:55
696 查看
1.通过id定位元素
resrouce-id属性是id:WebElement element = driver.findElement(By.id("com.oupeng.mini.android:id/search_engine_title"));
2.通过name定位元素
text属性是nameWebElement element = driver.findElement(By.name("百度一下或输入网址"));
3.通过ClassName定位元素
class属性是classnameWebElement element = driver.findElement(By.ClassName("android.widget.TextView"));
4.通过xpath定位
Appium对于xpath定位执行效率是比较低的,一般情况下尽量不用这个定位方式。WebElement element = driver.findElement(By.xpath("//android.widget.TextView[@index='1']"));
5.通过AccessibilityId定位元素
WebElement element = driver.findElementByAccessibilityId("打开标签");
6.通过AndroidUiAutomator定位元素
AndroidUIAutomator是一个强有力的元素定位方式,它是通过Android UIAutomator类库去找元素,可以选择id、name、className作为传入的字符串WebElement element =driver.findElementByAndroidUIAutomator("new UiSelector().resourceId(\"com.oupeng.mini.android:id/search_engine_title")");
7.web应用元素定位
7.1使用chrome-devtools
在PC浏览器地址栏输入:chrome://inspect/#devices
在移动端打开一个网页,就可以在PC浏览器页面中看到如下图接下来点击”inspect”,你会发现弹出一个新窗口,如图:
通过此图大家可以看到手机屏幕上的页面已经PC机上显示了,你可以看到手机wap页面源码以及UI界面。
如果DevTools窗口打开后是一片空白的,那是由于被墙的缘故。
在hosts文件中加入以下内容:64.233.162.83 chrome-devtools-frontend.appspot.com
保存之后,在CMD中输入:ipconfig /flushdns,然后再重新打开就可以了,操作方式和google浏览器中一样,点击探针去探元素
通过name定位:
WebElement element = driver.findElement(By.name(“word”));
7.2 chrome F12模式
打开PC chrome浏览器,点击F12,点击toggle device toolbar,刷新下网页就可以实现了,可以切换设备型号及屏幕的大小。7.3定位混合应用元素
混合应用是原生APP+webview组成的,可以简单的理解为一个原生app的外壳,内部全是html页面。在处理这样的app的定位的时候 需要先定位原生APP上的按钮或者链接,然后点击按钮或者链接,然后经过appium提供的方法,进入webview页面,通过之前介绍的定位工具和方法进行元素定位了。如果说你的android版本小于4.4,那么你需要使用Selendroid模式来作为测试引擎,在测试初始化的时候需要设置该capability。如果你的android版本大于等于4.4,那么Appium作为测试引擎,然后通过chromedriver来处理webview。如果你使用的是APPIUM测试引擎,调试WebView需要满足安卓系统版本为Android4.4+已上,并且需要在你的APP内配置相应的代码,在WebView类中调用静态方法setWebContentsDebuggingEnabled,如下:
if (Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) { WebView.setWebContentsDebuggingEnabled(true); }
进入webview的操作:
//这里使用driver.getContextHandles();获取app的handles,原生应用会有一个handle,webview也会有一个handle Set<String> contexts = driver.getContextHandles(); for(String cotext:contexts) { System.out.println(context); //会打印出 NATIVE_APP(原生app handle)和WEBVIEW_com.example.testapp(webview的 handle) } //进入webview中 driver.context((String) contexts.toArray()[1]); //操作webview中的内容
这里使用driver.getContextHandles();获取app的所有handles,原生应用会有一个NATIVE_APP 的handle,webview也会有一个WEBVIEW_XXX_XXX_XX的handle,确定了webview的handle之后,使用:driver.context(handle的字符串)进入webview页面
相关文章推荐
- Android 上多方式定位元素(python)
- 【APP自动化】Appium Android 元素定位方法 原生+H5
- 六 APPIUM Android 定位方式
- appium 使用findElementByAndroidUIAutomator 定位元素示例
- 使用Appium进行Android自动化测试 - 通过UI Automator方式查找元素
- Appium+Genymotion+robotframework+python系列二:Android元素定位
- Android 上多方式定位元素(python)
- Appium Android 元素定位方法 原生+H5
- Appium for Android元素定位方法
- Appium for Android元素定位方法
- Appium基础篇7-元素定位之by_android_uiautomator
- APPIUM Android 定位方式
- Appium学习路—Android定位元素与操作
- 七 APPIUM Android 定位方式
- Android 上多方式定位元素(python)
- appium 自动化:Android版本7.0以上定位不到元素,解决办法
- 定位android kernel crash的方式
- android 主题元素映射方式
- HTML中元素的定位方式
- android 三种定位方式