第十期_Appium 使用进阶_20190818

模拟器

  • bluestacks 类似网易mumu,中文名蓝叠
  • 网易mumu 默认支持arm指令,不过版本只有6.0
  • genymotion 默认只支持x86 需要插件才可以支持arm指令
  • 真机

mumu设置

  • 自定义显示 宽720 -高1080
  • 开发者选项-》输入-》显示坐标与点击位置

演练app

常用api

  • click
  • send_keys
  • get_attribute
  • page source

TouchAction

  • 长按
  • 滑动

定位

  • Find Elements - Appium

  • id

  • aid

  • xpath

  • uiautomator new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(“WebView”).instance(0));

  • find_element.find_elementn 父子关系

xpath的用法

  • 绝对定位(不建议) /hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.view.ViewGroup/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.widget.RelativeLayout/android.widget.LinearLayout/android.widget.FrameLayout[1]/android.widget.FrameLayout/android.widget.ImageView

相对定位(根据重要属性定位)

  • //*[@resource-id=‘com.xueqiu.android:id/user_profile_icon’ and @class=‘android.widget.ImageView’]
  • //*[contains(@resource-id, ‘user_profile_icon’) and contains(@class, ‘Image’)]
  • //*[@text=‘基金’ and contains(@resource-id, ‘button’)]
  • //*[@text=‘基金’ and @index=‘1’]
  • (//*[@text=‘基金’])[1]
  • //[contains(@resource-id, ‘buttons_container’)]//[@text=‘基金’]

android uiautomator定位

    def test_uiautomator(self):
        self.driver.find_element_by_android_uiautomator('new UiScrollable('
                                                        'new UiSelector().scrollable(true).instance(0))'
                                                        '.scrollIntoView('
                                                        'new UiSelector().text("Views").instance(0));').click()



        self.driver.find_element_by_android_uiautomator('new UiScrollable('
                                                        'new UiSelector().scrollable(true).instance(0))'
                                                        '.scrollIntoView('
                                                        'new UiSelector().text("Tabs").instance(0));').click()


toast识别

  • toast原理
  • toast识别方法

断言

  • 普通的断言
  • harmcrest

用例实战

  • 上节课作业演练实战
  • 参数化

课间休息与下节课预告

  • 16:35回来
  • 作业讲解
  • 具体用例增强

TODO

  • 8.1 appium 1.14 无法获取class

Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn’t exist!
Error while obtaining UI hierarchy XML file: com.android.ddmlib.SyncException: Remote object doesn’t exist!

appium session需要关闭,才可以使用uiautomatorviewer

appium server

npm install -g cnpm --registry=https://registry.npm.taobao.org 
cnpm install -g appium

课后作业

  • 点击自选,添加股票,判断股票添加成功
  • 再次添加股票,添加股票的按钮要变成“已添加”
  • 删除已经添加的股票,再次搜索股票,股票的按钮变成“加自选”
  • 注意“自选”菜单,可能会动态浮动

下周课程

  • 使用PO重构用例,并完成真实app的自动化测试
  • webview、小程序、toast
  • appium原理