検証環境が構築されていたので、自動化テストのフローを試してみることにした。
一、CAPTCHA認識
過去の画像CAPTCHA認識工作经验としてSikuliライブラリを使用したことがあるが、更新が停止しているようなので、今回は使用を見送ることにした。CAPTCHA画像をどのように取得するかを検討し、最初はAutoItLibraryライブラリを使ってマウス操作で画像を保存することを試みた。手動で保存する場合は正常に保存されるが、AutoItLibraryを使うとHTML形式で保存されるという問題が発生し、解決できませんでした。その後、Selenium2Libraryでスクリーンショットを撮り、Pythonで画像切り抜きによってCAPTCHAを取得する方法を考え付けた。実装中にCapture Element Screenshotというキーワードを発見했는데、これは比較的新しい機能のようだ。このキーワードを使えば直接CAPTCHA画像を取得でき、Pythonで解析してCAPTCHA認識できる。RobotFrameworkのカスタムキーワード機能も活かすため、ImageOcr.pyというファイルを作成し、ImageOcrクラスを定義してviewClickCodeキーワードを追加した。ddddocrを使用して画像を解析しCAPTCHAを取得する仕組みだ。
# -*- coding:utf-8 -*-
#自動化テスト用画像CAPTCHA処理ライブラリ
import ddddocr
from robot.api.deco import keyword
class ImageOcr:
ROBOT_LIBRARY_SCOPE = "SUITE"
ROBOT_AUTO_KEYWORDS = False
def __init__(self):
pass
@keyword('viewClickCode')
def view_click_code(self, 画像パス):
'''クリックCAPTCHA認識,点选すべき座標を返す'''
try:
認識エンジン = ddddocr.DdddOcr()
with open(画像パス, 'rb') as ファイル:
画像データ = ファイル.read()
結果 = 認識エンジン.classification(画像データ)
return 結果
except Exception as エラー:
print(f"認識失敗: {エラー}")
return ''
if __name__ == '__main__':
結果 = ImageOcr().view_click_code('D:\\imgcode\\2.png')
print(結果)
print(len(結果))
カスタムキーワードをRobotFrameworkのLibraryとしてインポートして使用する。
二、业务フロー
网购サイトを模拟し、ユーザーが商品を 선택して注文するプロセスをテストした。ログイン時にCAPTCHAを初めて入力的时候就错误な値を入力し、CAPTCHAを更新して再ログインするフロー도実装した。RobotFrameworkの各种キーワード(xpath、セレクタ、AutoItLibraryのマウス・キーボード操作など)の使用법을復習の意味で试了些内容。接下来直接示すスクリプトを紹介する。
*** Settings ***
Library Selenium2Library
Library AutoItLibrary
Library DateTime
Library F:/Stock/ImageOcr.py
*** Variables ***
${画像パス} D:\\imgcode
*** Test Cases ***
ログイン流程
Log テスト開始
Open Browser https://www.baidu.com/ Google Chrome
Maximize Browser Window
Wait Until Element Is Visible id=s-top-loginbtn
Click Element id=s-top-loginbtn
Sleep 2
Wait Until Element Is Visible id=passport-login-pop-api
Sleep 2
Input Text name=userName 18575533040
Sleep 2
Send {ENTER}
Send 123456
Sleep 2
Send {ENTER}
Sleep 2
商品購入流程
Open Browser https://dsmall.csdeshang.com/ Google Chrome
Maximize Browser Window
click element class=close-fixed-suspension
Wait Until Element Is Visible xpath=//div[@cat_menu_id='1']
click element xpath=//a[contains(text(),'小米')]
click element xpath=//a[contains(text(),'小米 红米NOTE 5A智能拍照手机16G/32G/64G')]
${ウィンドウ} Switch Window NEW
log ${ウィンドウ}
Wait Until Element Is Visible class=dss-buy
click element xpath=//a[@class='increase iconfont']
Mouse Over id=dss-freight-selector
sleep 2
click element xpath=//li[@data-index='0']
sleep 1
click element xpath=//ul[@class='area-list']/li/a[contains(text(),'河南省')]
Wait Until Element Is Visible id=stock_city_item
click element xpath=//ul[@class='area-list']/li/a[contains(text(),'郑州市')]
sleep 1
Wait Until Element Is Visible id=stock_area_item
click element xpath=//ul[@class='area-list']/li/a[contains(text(),'新郑市')]
sleep 1
click element xpath=//a[@class='addcart ']
sleep 1
Input Text id=member_name buyer
Input Password id=member_password 123456
Set Screenshot Directory ${画像パス}
${現在時刻} Get Current Date UTC
${ファイル名時刻} convert date ${現在時刻} exclude_millis=yes result_format=%Y%m%d%H%M%S
${ファイル名} Catenate ${ファイル名時刻}.png
Capture Element Screenshot xpath=//img[@class='fl ml10'] ${ファイル名}
sleep 1
${画像URL} Catenate ${画像パス}\\${ファイル名}
${認証コード} viewClickCode ${画像URL}
log ${認証コード}
Input Text id=captcha_normal_inajax 1234
sleep 1
click element name=Submit
${エラー表示} Run Keyword And Return Status Element Should Be Visible id=captcha_normal_inajax-error
Set Variable ${認証コード} ''
log ${エラー表示}
sleep 1
Run Keyword If '${エラー表示}'=='False' click element xpath=//img[@class='fl ml10']
sleep 1
Run Keyword If '${エラー表示}'=='False' Capture Element Screenshot xpath=//img[@class='fl ml10'] ${ファイル名}
sleep 2
${認証コード} Run Keyword If '${エラー表示}'=='False' viewClickCode ${画像URL}
log ${認証コード}
sleep 2
Run Keyword If '${認証コード}'!='' Input Text id=captcha_normal_inajax ${認証コード}
sleep 1
Send {ENTER}
sleep 5
三、動作確認
テストスクリプトを実行すると、CAPTCHA認識 Engineが画像を解析し、適切な座標または認証コードを取得できる。Selenium2LibraryとAutoItLibraryを組み合わせることで、Webアプリケーションの登录から商品选择、カートに追加、チェックアウトまでの End-to-Endテストが自动化できる。