Appium移动自动化测试(三)之元素定位

实验简介css

  作过UI自动化(web自动化, 移动自动化)的同窗都会知道, 除去框架的选型和搭建之外, 落到实处的对元素进行定位就成了最重要的技能. java

  作过UI自动化的同窗会知道, 对页面元素的定位方式有8种: id, name, xpath, class, link text, partial link text, tag name, css selector, 使用手法, 优先级的选择以及效率稍有不一样, 可是异曲同工, 目标就是要找到元素自己. python

  一样, 要作Native APP的自动化, 在元素定位上也大同小异, web 元素通用的方式, Appuim也适用, 甚至它还有一些个性化的方式.  可是对于Web View容器下的元素识别, 和web driver并没有太多差别android

实验目的web

  1. 练习使用工具uiautomatorviewer对元素进行定位app

  2. 熟悉元素定位的方法框架

  3. 编写自动化测试用例 - 添加联系人工具

实验流程测试

  1. 首先来看一下测试对象, 一个添加联系人的app, 功能页面以下图排序.ui

 

   2. 在apk/tools下, 找到uiautomatorviewer.bat

    

    点击以下图标, 同步App页面元素详细信息

    

    3. 从目前的页面上, 咱们能够获得一些属性, 其对应关系以下图:

    

 

    4. 了解了这些基本属性, 其实就能够完成代码的编写了, 以下

#coding=utf-8
from appium import webdriver
import time
from selenium.webdriver.common.by import By

desired_caps = {}
desired_caps['platformName'] = 'Android'
desired_caps['platformVersion'] = '23'
desired_caps['deviceName'] = 'Android Emulator'
desired_caps['appPackage'] = 'com.example.android.contactmanager'
desired_caps['appActivity'] = '.ContactManager'

driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
#   点击Add Contact
driver.find_element_by_name('Add Contact').click()  #text
#   输入 Contact Name
name = 'test03'
driver.find_element_by_id('com.example.android.contactmanager:id/contactNameEditText').send_keys(name)  #resource-id
#   输入 Contact Phone
driver.find_element_by_id('com.example.android.contactmanager:id/contactPhoneEditText').send_keys('13111111111')
#   输入 Contact Email
driver.find_element_by_id('com.example.android.contactmanager:id/contactEmailEditText').send_keys('test@test.com')
#   点击 Save Button
driver.find_element_by_name('Save').click()
#   点击 "Show Invisible Contacts(Only)"
driver.find_element_by_accessibility_id('Show Invisible Contacts (Only)').click()
nameAdded = driver.find_element_by_name(name).text
print(nameAdded)
if nameAdded == name:
    print('成功添加联系人.')
else:
    print('添加联系人失败')

driver.quit()

    Accessibility ID在Android上面就等同于contentDescription,这个属性是方便一些生理功能有缺陷的人使用应用程序的。好比咱们有一个ImageView里面放置一张颜色复杂的图片,可能一些色弱色盲的人,分不清这张图片中画的是什么东西。若是用户安装了辅助浏览工具好比TalkBack,TalkBack就会大声朗读出用户目前正在浏览的内容。TextView控件TalkBack能够直接读出里面的内容,可是ImageView TalkBack就只能去读contentDescription的值,告诉用户这个图片究竟是什么。

  5. 上面用到了最经常使用的几种定位方式, 心心念念的强大的xpath还没的提到, 咱们来看看它的几种基本用法

    1).使用绝对路径定位,如截图所显示的 xpath 路径
      find_element_by_xpath("className/className/className/className")
    2).使用相对路径定位
      find_element_by_xpath("//className")
    3).经过元素的索引定位
      find_element_by_xpath("//className[index]")
    4).经过元素的属性定位
      一种属性:find_element_by_xpath("//className[@label='更多信息']")
      两种属性:find_element_by_xpath("//className[@label='更多信息'][@isVisible='1']")
      部分属性(最强大):find_element_by_xpath("//className[contains(@label,'更多')]")

#   输入 Contact Name
name = 'test03'
driver.find_element_by_xpath('//android.widget.EditText["3"]').send_keys(name)

  6. 使用android uiautomator定位

    这个方法也属于 Appium(Android)扩展的定位方法。一样使用 UIAutomatorViewer.bat 工具直接查看。

    也就是说一个元素的任意属性均可以经过android uiautomator方法来进行定位,但要保证这种定位方式的惟一性。

#  点击 "Show Invisible Contacts(Only)"
driver.find_element_by_android_uiautomator("new UiSelector().text(\"Show Invisible Contacts (Only)\")").click()
# description对应的属性是content-desc
# driver.find_element_by_android_uiautomator("new UiSelector().description(\"Show Invisible Contacts (Only)\")").click()  

    顺便贴一下UiSelector的其它方法, 依然很好用.

    文本方面的方法:
      1.text(String text) 文本
      2.textContains(String text) 文本包含
      3.textMatches(String regex) 文本正则
      4.textStartsWith(String text) 文本开始字符

    描述方面的方法:
      1.description(String desc) 描述
      2.descriptionContains(String desc) 描述包含
      3.descriptionMatches(String regex) 描述正则
      4.descriptionStartsWith(String desc) 描述开始字符

driver.find_element_by_android_uiautomator("new UiSelector().descriptionContains(\"Show Invisible Contacts\")").click()

  曾哥有话说:

    方法find_element_by_android_uiautomator里的语句是用java处理, 它的字符串是放在双引号中的. 若是把字符串放在单引号中的话, 在python里看起来没有问题, 可是java却并不认为这是一个字符串. 错误信息在appuim server上能够清楚地看到:

    

    这个坑挺隐形的, 我趴了很久, 差点觉得 该方法在此处不适用, 很难过.

相关文章
相关标签/搜索