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:\blog\blog_script\images\test_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:\images\screenshot_01.png', message="首頁截圖")

三,使用adb截圖

  • 首先,進行截圖,命令如下

    adb shell screencap -p +手機上圖片保存路徑,如:adb shell screencap -p /sdcard/image.png

  • 然后,將截圖pull到電腦上,命令如下:

    adb pull +手機圖片路徑 +保存到電腦的路徑,如:

    adb pull /sdcard/image.png C:\Users\xiaoqq\Desktop\test_project

    此時我們在電腦相應的目錄里就能找到該圖片。

用appium做appUI自動化測試就使用一中的方法,使用Airtest或Poco做appUI自動化的測試就使用第二種方法。不推薦使用adb截圖,速度較慢!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM