zoukankan      html  css  js  c++  java
  • Python+Appium自动化测试(7)-截图方法

    一,selenium模块的两种截图方法

    • get_screenshot_as_file(filename)
      参数filename为截图文件保存的绝对路径,如:
      driver.get_screenshot_as_file(r'E:/test_project/screenshot/test_01.png')
      
    • save_screenshot(filename)
      该方法与get_screenshot_as_file()不同的是,参数为文件名称,保存当前屏幕截图到当前脚本所在的文件,如:
      driver.save_screenshot('test_02.png')
      

    上面两种方法使用举例,代码如下:

    # -*- coding:utf-8 -*-
    # @author: 给你一页白纸
    
    import time
    from appium import webdriver
    
    def android_driver():
        desired_caps = {
            "platformName": "Android",
            "platformVersion": "10",
            "deviceName": "PCT_AL10",
            "appPackage": "com.ss.android.article.news",
            "appActivity": ".activity.MainActivity",
            "automationName": "uiautomator2",
            "unicodeKeyboard": True,
            "resetKeyboard": True,
        }
        # 启动今日头条app
        driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
        driver.implicitly_wait(8)
        return driver
    
    def login_opera(driver):
        '''登录今日头条操作'''
        try:
            driver.find_element_by_id("com.ss.android.article.news:id/ciy").click() # 点击【我知道了】
            driver.find_element_by_id("android:id/button1").click() # 点击权限管理-确定按钮
            driver.find_element_by_xpath("//android.widget.TabWidget/android.widget.RelativeLayout[@index=3]").click() # 点击未登录
            driver.find_element_by_id("com.ss.android.article.news:id/a1c").click() # 未登录页点击登录按钮
            driver.find_element_by_id("com.ss.android.article.news:id/bfm").click() # 登录页点击“。。。”
            driver.find_element_by_xpath("//android.widget.LinearLayout[@index=4]").click() # 选择密码登录
            driver.find_element_by_id("com.ss.android.article.news:id/c7").send_keys("xxxxxxxx")   # 输入账号
            driver.find_element_by_id("com.ss.android.article.news:id/ch").send_keys("xxxxxxxx")   # 输入密码
            driver.find_element_by_id("com.ss.android.article.news:id/a31").click() # 点击登录
        except Exception as e:
            print("登录错误,原因是:{}".format(e))
            # 报错时截图
            driver.get_screenshot_as_file(r'E:loglog_scriptimages	est_login_error_01.png')
            driver.save_screenshot('test_login_error_02.png')
    
    if __name__ == '__main__':
        driver = android_driver()
        login_opera(driver)
    

    二, snapshot(*args, **kwargs)

    这是Airtest框架里面提供的api,使用前需要安装airtest库,并导入。官方文档参数说明如下:

    filename – 保存截图的文件名,默认保存路径为 ST.LOG_DIR

    msg – 截图文件的简短描述,将会被显示在报告页面中

    quality – The image quality, integer in range [1, 99]

    fiename指定保存截图的绝对路径,msg与quality可为空

    # 安装airtest
    pip install -U airtest
    
    # 导入并使用
    from airtest.core.api import *
    snapshot(filename='E:imagesscreenshot_01.png', message="首页截图")
    

    三,使用adb截图

    • 首先,进行截图,命令如下

      adb shell screencap -p +手机上图片保存路径,如:adb shell screencap -p /sdcard/image.png

    • 然后,将截图pull到电脑上,命令如下:

      adb pull +手机图片路径 +保存到电脑的路径,如:

      adb pull /sdcard/image.png C:UsersxiaoqqDesktop est_project

      此时我们在电脑相应的目录里就能找到该图片。

    用appium做appUI自动化测试就使用一中的方法,使用Airtest或Poco做appUI自动化的测试就使用第二种方法。不推荐使用adb截图,速度较慢!

  • 相关阅读:
    GitLab用户权限管理
    类似vant中的tab实现
    Gitgitee/github/gitlab账号分离
    Vim操作
    partition by 用法
    crontab执行feat_gen.sh时,报错找不到pyspark
    SQL同一个字段出现null和0值,有何区别,原因是什么?left join导致null值出现,case when导致0值出现
    linux 定时任务crontab的用法
    卡方检验
    ROC与AUC
  • 原文地址:https://www.cnblogs.com/lfr0123/p/13610884.html
Copyright © 2011-2022 走看看