zoukankan      html  css  js  c++  java
  • app自动化测试----基础入门appium初使用(UI自动化)

    1.说明

       前提:app自动化环境搭建----Windows系统搭建  已搭建完成

       appium官方文档:https://appium.io/docs/en/about-appium/getting-started/?lang=zh

    2.创建项目(连接手机)

    python appium 官方地址:https://pypi.org/project/Appium-Python-Client/

    # 安装 python appium 包
    pip install Appium-Python-Client   # windows系统执行命令
    pip install Appium-Python-Client   # mac系统执行命令

    项目结果:

    # main.py 文件
    import os
    from appium import webdriver
    
    # 获取apk在项目中的存放地址
    apk = os.path.join(os.path.dirname(os.path.abspath(__file__)),'apk/app-release-fanmao-cnode.apk')
    
    desired_caps = {
        'platformName':'Android',          # 测试Android系统
        'platformVersion':'7.1.2',         # Android版本 可以在已连接手机 设置->关于手机 中查看
        'deviceName':'127.0.0.1:62001',    # cmd中使用 adb devices 命令查看已连接的设备
        'automationName':'UiAutomator2',   # 自动化引擎(默认UiAutomator2即可)
        'app':apk                          # app 文件路径(当前方式,每次运行项目,app都会重新安装一次)
    }
    
    # 创建 webdriver 实例 连接手机
    driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_capabilities=desired_caps)

    第一步:启动 appium server

    需要注意的是:使用手机测试的话,启动appium 的时候需要在手机上安装 appium setting 有些手机有安全选项 需要手动去确认一下。

    第二步:在pycharm中执行代码

    如果是在模拟器中执行,会先安装appium setting(有,则跳过这一步),再安装我们测试的apk,然后打开apk(打开成功,则连接手机通过,才可以继续编写我们的代码)

    执行完成后,可以关闭appiu(Ctrl+c 即可以关闭)

    3.自动化登录app

     (1)找到自己的adb安装路径

     找到 app 定位工具

    (2)在模拟器或者连接的真机中,打开app里面我们需要定位的页面,再打开uiautomatorviewer.bat

     

    (3)元素定位----xpath 定位

    //class的值[@属性及其对应的值] /下面的元素class值

    //android.view.ViewGroup[@resource-id="org.cnodejs.android.md:id/toolbar"]/android.widget.ImageButton

    # main.py 文件
    import os
    import time
    from appium import webdriver
    
    # 获取apk在项目中的存放地址
    apk = os.path.join(os.path.dirname(os.path.abspath(__file__)),'apk/app-release-fanmao-cnode.apk')
    
    desired_caps = {
        'platformName':'Android',          # 测试Android系统
        'platformVersion':'7.1.2',         # Android版本 可以在已连接手机 设置->关于手机 中查看
        'deviceName':'127.0.0.1:62001',    # cmd中使用 adb devices 命令查看已连接的设备
        'automationName':'UiAutomator2',   # 自动化引擎(默认UiAutomator2即可)
        'app':apk                          # app 文件路径(当前方式,每次运行项目,app都会重新安装一次)
     } 

    # 创建 webdriver 实例 连接手机
    driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub",desired_capabilities=desired_caps) time.sleep(5)

    # 点击登录
    login_image_btn = '//android.view.ViewGroup[@resource-id="org.cnodejs.android.md:id/toolbar"]/android.widget.ImageButton' driver.find_element_by_xpath(login_image_btn).click()
    time.sleep(
    1)
    click_login_name
    = 'org.cnodejs.android.md:id/tv_login_name'
    driver.find_element_by_id(click_login_name).click() time.sleep(
    1)

    # 输入登录的token http://47.100.175.62:3000/
    driver.find_element_by_id('org.cnodejs.android.md:id/edt_access_token').send_keys("83dc9ad3-f0e1-4cf3-a0de-d82a3508f79d")

    # 点击登录
    driver.find_element_by_id('org.cnodejs.android.md:id/btn_login').click()

    第一步:启动 appium server

    需要注意的是:使用手机测试的话,启动appium 的时候需要在手机上安装 appium setting 有些手机有安全选项 需要手动去确认一下。

    第二步:关闭 uiautomatorviewer.bat 元素定位工具

    第二步:在pycharm中执行代码

    4.元素定位

    (1)Xpath定位

            //class的值[@属性及其对应的值] /下面的元素class值

            //android.view.ViewGroup[@resource-id="org.cnodejs.android.md:id/toolbar"]/android.widget.ImageButton

    (2)and 并且多个属性来定位

          //*[@text="登录" and @resource-id="org.cnodejs.android.md:id/btn_login"]

    (3)子元素定位,先找到父元素,再找到子元素,[2] 表示第二个子元素

          //*[@resource-id="org.cnodejs.android.md:id/recycler_view"]/android.widget.LinearLayout[2]

    (4)xpath text 文本值定位

            //*[@text="点击头像登录"]

        

    5.自动化发微博

        5.1 先在模拟器上面下载并安装 微博App (使用模拟器/真机都可以),安装完成并登陆后,获取包名,启动页名称

              打开cmd,运行命令

             

           打开模拟器中的微博,查看日志

          

         packageName:com.sina.weibo        activityName.SplashActivity

       5.2 连接模拟器获取自动化代码

       启动 appium桌面客户端

     

        在新的窗口中添加连接配置

       

    {
        "platformName":"Android",          # 测试Android系统
        "platformVersion":"7.1.2",         # Android版本 可以在已连接手机 设置->关于手机 中查看
        "deviceName":"127.0.0.1:62001",    # cmd中使用 adb devices 命令查看已连接的设备
        "automationName":"UiAutomator2"    # 自动化引擎(默认UiAutomator2即可)
    }
    
    
    # 可直接复制到JSON Representation
    {
      "platformName": "Android",
      "platformVersion": "7.1.2",
      "deviceName": "127.0.0.1:62001",
      "automationName": "UiAutomator2"
    }

     ps:上传图片好麻烦啊~~~(注意,需要先下载几张图片在手机相册中)

    from appium import webdriver
    import time
    
    from appium.webdriver.common.touch_action import TouchAction
    
    desired_caps = {
        'platformName':'Android',          # 测试Android系统
        'platformVersion':'7.1.2',         # Android版本 可以在已连接手机 设置->关于手机 中查看
        'deviceName':'127.0.0.1:62001',    # cmd中使用 adb devices 命令查看已连接的设备
        'automationName':'UiAutomator2',   # 自动化引擎(默认UiAutomator2即可)
        'noReset': True,                   # 不要重置app的状态(比如,已经登陆的app,我们运行项目的时候保留之前的状态)
        'fullReset': False,                # 不要清理app的缓存数据(比如,已经登陆的app,我们运行项目的时候保留之前的状态)
        'appPackage':"com.sina.weibo",     # 应用的包名(打开对应包名的app)
        'appActivity': ".SplashActivity"   # 应用的活动页名称
    }
    driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub',desired_capabilities=desired_caps)
    time.sleep(15)
    
    el1 = driver.find_element_by_id("com.sina.weibo:id/rightBtn_wrapper")
    el1.click()
    time.sleep(2)
    el2 = driver.find_element_by_accessibility_id("写微博")
    el2.click()
    # 等待发微博页面加载成功
    time.sleep(3)
    el3 = driver.find_element_by_id("com.sina.weibo:id/edit_view")
    el3.send_keys("Hi 今天天气真好啊")
    
    driver.find_element_by_accessibility_id("插入图片").click()
    time.sleep(3)
    # 选择图片(抓取不到,所以需要自己去写)
    xpath_img1 = '//*[@resource-id="com.sina.weibo:id/photo_album_gridview"]/android.widget.RelativeLayout[2]'
    xpath_img2 = '//*[@resource-id="com.sina.weibo:id/photo_album_gridview"]/android.widget.RelativeLayout[3]'
    driver.find_element_by_xpath(xpath_img1).click()
    time.sleep(2)
    # 选中
    driver.find_element_by_id('com.sina.weibo:id/btn_num_check').click()
    # 返回上一层
    driver.back()
    time.sleep(2)
    driver.find_element_by_xpath(xpath_img2).click()
    time.sleep(1)
    driver.find_element_by_id('com.sina.weibo:id/btn_num_check').click()
    # 点击下一步
    driver.find_element_by_id('com.sina.weibo:id/btn_confirm_edit').click()
    time.sleep(1)
    driver.find_element_by_id('com.sina.weibo:id/btn_confirm_edit').click()
    time.sleep(1)
    
    
    el4 = driver.find_element_by_accessibility_id("发送")
    el4.click()
    # 刷新微博
    time.sleep(3)
    TouchAction(driver).press(x=390, y=200).move_to(x=390, y=1323).release().perform()
    
    # driver.quit()

            

  • 相关阅读:
    Linux进程管理
    GitHub
    MySQL存储过程
    MySQL自定义函数
    MySQL运算符和内置函数
    js类型检测
    防止SQL注入的方法
    PDO数据库抽象层
    PHP操作MySQL的常用函数
    第二周
  • 原文地址:https://www.cnblogs.com/Z-Queen/p/14855826.html
Copyright © 2011-2022 走看看