【自动化训练营】Appium 企业微信实战(二)课程贴

参考链接

Xpath表达式的常用函数:https://www.w3school.com.cn/xpath/xpath_functions.asp
Appium DesireCapa 官方:https://github.com/appium/appium/blob/master/docs/en/writing-running-appium/caps.md

元素定位 – 重点

  • Id 定位(优先级最高)
  • Accessibility ID 定位(其次)
  • XPath 定位(速度慢,定位灵活)
    • 层级关系定位
      1. contains 表达式
      //*[contains(@text,'手动输入' )]
      //*[contains(@text,'姓名' )]/..//*[contains(@class, 'EditText')]
      
      1. not 表达式
      2. starts-with 表达式
      3. ends-with 表达式
  • Uiautomator 定位(Android 原生定位方式,速度快,语法复杂)
     new UiSelector().text("text")
     new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(“查找的文本”).instance(0));
    
  • iOSNsPredicateString iOS 原生定位方式

除了appium inspector 如何查找元素xpath是否正确?

首先通过命令获取当前页面的布局XML文件,默认会生成到手机路径的这个位置 /sdcard/window_dump.xml,然后通过 adb pull 命令把这个文件拿出来。

adb shell /system/bin/uiautomator dump 
adb pull /sdcard/window_dump.xml /path/to/your/xml

然后通过工具解析这个文件。

  1. Pycharm 插件来查找Xpath表达式,XPATHVIEW+ XSLT(Evaluate XPath…)
  2. 找在线的工具

PO 模式封装和改造 (重点)

  • 首先搭架子
  • 填业务逻辑
  • 构造共用的driver
  • 处理弹框业务逻辑,封装了find方法

find 封装(重点)

    def find(self, locator, value):
        try:
            if isinstance(locator, tuple):
                element = self._driver.find_element(*locator)
            else:
                element = self._driver.find_element(locator,value)
            self._error_num = 0
            return element
        except Exception as e:
            if self._error_num >self._max_errornum:
                raise e
            self._error_num += 1

            for ele in self._black_list:
                ellist = self._driver.find_elements(*ele)
                if len(ellist)>0:
                    ellist[0].click()
                    return self.find(locator,value)
            raise e

DesireCapability 高级用法

  • dontStopAppOnReset 如果当前页面在desirecapability里面设置的appPackage这个应用里面的任何页面A, 启动应用的时候,就不会杀掉这个应用重新启动,会在页面A开始运行测试用例。
    - 模拟的命令是下面的命令不加 -S 参数:
    adb shell am start -n com.tencent.wework/.launch.LaunchSplashActivity

源码分析

appium webdriver <- activity 等webdriver <- selenium webdriver

class WebDriver(
    AppiumSearchContext,
    ActionHelpers,
    Activities,
    Applications,
    Clipboard,
    Context,
    Common,
    DeviceTime,
    Display,
    ExecuteDriver,
    ExecuteMobileCommand,
    Gsm,
    HardwareActions,
    ImagesComparison,
    IME,
    Keyboard,
    Location,
    LogEvent,
    Network,
    Performance,
    Power,
    RemoteFS,
    ScreenRecord,
    Session,
    Settings,
    Sms,
    SystemBars
):

课后作业

课后反馈

关闭