一,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截圖,速度較慢!