一. airtest-selenium環境搭建
1.1 安裝與介紹
# airtest-selenium庫是基於selenium庫的進一步封裝: https://airtest.doc.io.netease.com/tutorial/13_Selenium/ pip install airtest-selenium pip install pynput
airtest-selenium庫的幾個特點: 1) 對切換標簽的界面進行了友好封裝, 2)支持圖像識別功能, 3)自動進行log記錄(參考selenium-java的監聽模式), 4)兼容selenium的原生api
1.2 下載瀏覽器和瀏覽器驅動
本文使用Chrome瀏覽器,將下載與之對應的瀏覽器驅動chromedirver.exe
1) 查看chrome版本
chrome://version/
2) 關閉Chrome瀏覽器的自動更新功能
# 如果瀏覽器自動更新后,瀏覽器的版本會發生變化,這樣可能會導致已下載的chromedirver.exe失效 右擊我的電腦——管理——服務和應用程序——服務——停止:google更新服務(gupdate)、google更新服務(gupdatem);啟動類型:手動
3) chromedriver與chrome版本的映射關系
ChromeDriver版本 Chrome版本 v2.44 v69-71 v2.42 v68-70 v2.41 v67-69 v2.40 v66-68 v2.38 v65-67 v2.37 v64-66 v2.35 v62-64 v2.34 v61-63 v2.33 v60-62 v2.32 v59-61 v2.31 v58-60
4) 下載Chrome驅動,並將其與Chrome.exe存放到同一目錄下
Chrome.exe的默認存放路徑為:C:\Program Files (x86)\Google\Chrome\Application chromedriver下載地址: http://npm.taobao.org/mirrors/chromedriver 不同版本的chrome下載: https://www.slimjet.com/chrome/google-chrome-old-version.php
3. 驗證環境
# -*- coding:utf-8 -*- # Author:chinablue import time from airtest_selenium.proxy import WebChrome driver = WebChrome(executable_path=r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe") driver.maximize_window() driver.get("http://www.baidu.com/") time.sleep(5) driver.quit()
4. 安裝問題記錄
4.1 如果出現如下報錯,可能需要降低numpy的版本
ImportError: numpy.core.multiarray failed to import
# 通過查看發現當前numpy版本為1.19.4,將其降為1.15.4 pip install numpy==1.15.4
4.2 如果出現如下報錯,嘗試以管理員權限重新啟動Pycharm軟件
selenium.common.exceptions.WebDriverException: Message: unknown error: Failed to create Chrome process.
二. 常用使用場景說明
2.1 Chrome瀏覽器常用參數配置
# -*- coding: utf-8 -*- # @Time : 2020/11/18 20:52 # @Author : chinablue import time from airtest_selenium.proxy import WebChrome from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('--disable-gpu') # 指定瀏覽器的分辨率 options.add_argument('--window-size=1920,1080') # 關閉提示: Chrome正受到自動測試軟件的控制 # options.add_argument('--disable-infobars') # 老版本Chrome瀏覽器的寫法 options.add_experimental_option("excludeSwitches", ['enable-automation']) # 無界面運行 # options.add_argument('--headless') # 配置代理 # options.add_argument("--proxy-server=http://127.0.0.1:9631") # 其他設置: 不加載圖片, 設置語言, 設置User-Agent等 driver = WebChrome(executable_path=r"C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe", chrome_options=options) driver.get("http://www.baidu.com/") time.sleep(5) driver.quit()
注意事項:
1) 若無界面運行時,拋出MoveTargetOutOfBoundsException異常, 則給瀏覽器設置--window-size參數后再試
2.2 Alert框的處理
driver.switch_to.alert.accept()
注意事項:
1) 若當前頁面存在alert框,此時關閉瀏覽器時會拋出異常
2.3 登錄操作中簡單滑動滑塊操作
from selenium.webdriver import ActionChains action_chains = ActionChains(driver) d1 = driver.find_element_by_class_name("el-icon-d-arrow-right") # 定位滑塊 action_chains.click_and_hold(d1).perform() # 鼠標左鍵按住滑塊不動 action_chains.reset_actions() # 清楚之前的action action_chains.move_by_offset(300, 0).perform() # 平行移動滑塊, 其中300表示x軸, 0表示y軸
2.4 自動處理Chrome瀏覽器的通知彈框
# 創建一個名字為run.reg的文件, 內容如下. 雙擊執行此文件來修改注冊表信息 Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google] [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome] "DefaultPluginsSetting"=dword:00000001 [HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\PluginsAllowedForUrls] "1"="http://ztc.njtopsun.com/topsun/#/"
注意事項:
1) 文件中藍色部分內容需要替換成你自己要測試的網站
2) Chrome在不同版本下設置自動處理通知彈框的方法不一樣,本示例中使用的Chrome版本為Chrome 86
3) Chrome中DefaultPluginsSetting參數說明, 請點擊這里