zoukankan      html  css  js  c++  java
  • Appium 使用小结

    前言:

    Appium 是通过模拟用户操作进行自动化操控手机端第三方库。通常使用场景多用于回归测试。在产品教成熟,页面改动较少后,通过ui自动化进行回归操作测试。

    Appium 本身使用很简单,java和python两种语言都可以使用,在此我们将使用python操作Appium。

    1. 安装

    Appium安装配置环境比较复杂,本文不做过多解释,直接引用别人的链接:

    https://www.cnblogs.com/fnng/p/4540731.html

    2.使用

    Appium使用进行测试时,可以放到单元测试框架unittest中,然后用assert断言验证当前页面元素进行测试结果判断。

    以下为一个例子:

    # !/usr/bin/python3.6
    # -*- coding: UTF-8 -*-
    # author: lucien
    # 用例: 登入
    from appium import webdriver
    import unittest
    import time
    from appium.webdriver.common.touch_action import TouchAction
    from selenium.webdriver.support.ui import WebDriverWait
    
    class login(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            desired_caps = {
                "platformName": "Android",
                "platformVersion": "6.0",
                "deviceName": "mate9",
                "automationName": "UiAutomator2",
                "appPackage": "cn.vsx.vc",
                "appActivity": ".activity.RegistActivity",
                "noReset": "true",
            }
            cls.driver = webdriver.Remote('http://localhost:4723/wd/hub', desired_caps)
            WebDriverWait(cls.driver, 10).until(
                lambda x: x.find_element_by_xpath(
                    "//android.widget.TextView[contains(@text, '选择单位')]").is_displayed())  # 验证等待10秒超时
    
        def test001_login(self):
            self.driver.find_element_by_xpath("//android.widget.TextView[contains(@text, '选择单位')]").click()  # 点击展开选择单位
            time.sleep(1)
            self.driver.tap([(self.a * self.x, self.b * self.y)], duration=1)  # 点击选择单位
            WebDriverWait(self.driver, 10).until(
                lambda x: x.find_element_by_xpath(
                    "//android.widget.Button[contains(@text, '按住说话')]").is_displayed())  # 验证等待10秒超时

    结构很简单,单元测试框架中,套入appium操作手机,与验证元素。

    注意点:

    1. 头部文件重要的几个(appPackage, appActivity, platformVersion)

    首先appPackage要找到你的app包

    其次appActivity要找到你当前的页面

    最后Android版本要对应你的系统版本

    adb shell
    dumpsys activity | grep mFocusedActivity
    

    通过adb命令,应用程序启动后,找到包名和当前页

    2. 元素的选择:

    appium元素的选择与查找有很多方式

    通常简短的有:

    ID查找

    self.driver.find_element_by_id()
    

    类名查找:

    self.driver.find_element_by_class_name()
    

      

    其他还有by name   by tag name  等等

    其中比较精确的,也是比较常用的还是通过路径定位

    self.driver.find_element_by_xpath()
    

    3.元素的操作

    操作点较多,不一一列举,同样转链接:

    https://www.cnblogs.com/fanxiaojuan/p/4882676.html

    3. 坑与经验

    一 等待时间有三种: sleep(), implicitly_wait(), WebDriverWait().until()

    1. sleep强制等待时间

    2. implicitly_wait为隐性等待时间

    3. WebDriver为知道当前元素找到后才进行后续动作,等待时间自己设置否则报错

    通常建议使用第三种等待,较为科学

    二 弹出窗口找不到元素,定位方式要么让开发加上焦点聚焦在弹出窗口上,要么通过相对定位方式,通过TAP去点击

    开发中加入焦点

    contentView.setFocusable(true)
    

      

    Tap绝对路径定位

    x = driver.get_window_size()['width']  # 获取当前屏幕宽
    y = driver.get_window_size()['height'] # 获取当前屏幕高 a, b = 170 / 768, 790 / 1184 # 170和790为要选择的位置, 768和1184为屏幕实际大小 self.driver.tap([(a * x, b * y)], duration=1) # 点击选择

      

     三 长按后面不要接等待时间,等待时间会自动归入到长按中计算,导致后面元素判断出错。

    1. 可以通过其他操作直接中断长按操作

    2. 可以选择对于当前元素进行释放,来取消长按操作

    两种操作选择其一即可

    el = self.driver.find_element_by_xpath("//android.widget.Button[contains(@text, '按住说话')]")  # 找到组呼按钮
    TouchAction(self.driver).long_press(el, None, None, 10 * 1000).perform()  # 组呼按钮按下10秒
    time.sleep(5)
    TouchAction(self.driver).move_to(el).release().perform()  # 释放按钮
     

    四 单元测试框架中setUp中如果放入desired_caps,那么每一个test开头的用例都会导致重新启动一次连接,避免次情况产生,需要用到:

    setUpClass(cls)方法,记住加上装饰器,@classmethod

    这样在跑用例时,只会执行一次setUpClass方法,不会重复执行setUp

  • 相关阅读:
    SAR图像处理 MSTAR数据库利用问题
    python 获取系统环境变量 os.environ and os.putenv
    python 模块中的 __init__.py __main__.py
    pylint python2.7 安装记录
    Python--字典
    哈希表
    AC自动机模板
    平衡树(Splay)模板
    矩阵快速幂 模板
    非递归线段树
  • 原文地址:https://www.cnblogs.com/grandlulu/p/10175098.html
Copyright © 2011-2022 走看看