自動テストフレームワーク airtest アプリケーション 1: XX の読書書籍を PDF として保存

1. エアテストの概要

  Airtest は、画像認識とポコ コントロール認識に基づいて NetEase によって作成された UI 自動テスト ツールです。Airtest フレームワークは、NetEase チームによって開発された画像認識フレームワークであり、このフレームワークの先祖は、新しいグラフィック スクリプト言語である Sikuli です。Sikuli フレームワークの原理は次のとおりです。コンピュータ ユーザーは、コードを 1 行ずつ記述する必要はありません。代わりに、スクリーンショットを使用し、切り抜きを配置して成果物プログラムを形成します。これは Airtest の一部です。
  さらに、Airtest は U コントロール検索フレームワークである poco にも基づいています。このフレームワークも NetEase 独自のクロスプラットフォーム U テスト フレームワークです。原理は appium に似ています。コントロールの名前、ID、などを実行し、click.()、swip()、その他のメソッドなどの関数メソッドを呼び出して、対象のコントロールをクリックまたは操作します。

     詳細については、公式 Web サイトおよびAirtest の使用方法の探索を参照してください。

2. 準備

まず、スクリプトの作成、UI 要素の表示、デバッグを容易にするために、AirtestIDE をダウンロードする必要があります。

次に、iOS-Tagent を使用して携帯電話上に WebDriver サーバーを作成する必要があります。WebDriver サーバーは、iOS デバイスのリモート制御や UI 要素の検索に使用できます。関連するコードを複製した後、Xcode で WebDriverAgentRunner ターゲットを選択し、テスト モードを使用してコンパイルして実行します。この時点で、電話機はオートメーション実行モードに入ります。

3 番目のステップは、携帯電話のポート 8100 をコンピュータのポート 8100 にマッピングすることです。

iproxy は、usbmuxd に付属する小さなツールで、その機能は、デバイスの特定のポートをコンピュータの特定のポートにマッピングすることです。Mac では brew を通じてインストールできますbrew install usbmuxd

iproxy 8100 8100これは、携帯電話のポート 8100 をコンピュータのポート 8100 にマッピングすることを意味します。このようにして、コンピュータの 8100 ポートにアクセスすることで携帯電話にアクセスできます。

Windows ユーザーの場合のみ、この手順は、tidvice とwdaproxy代替[参考]。

このとき、AirtestIDE の右下の接続ボタンをクリックすると、成功すると右側にデバイスの画像が表示されます。

次に、コード編集領域にコードを記述します。

3. スクリプトの作成

次に実行する必要がある手順を想像してください。 1. アプリケーションを起動し、スクリーンショットを撮り始め、ページをめくって、ページが終了するまでスクリーンショットを撮ります。最初に直面した問題は、アプリケーションをどうやって起動するかということでした。1 つの方法は、poco("アプリケーション名") を使用することです。それが現在の画面内にある場合は、poco("アプリケーション名") を使用してクリックされる要素の位置を見つけ、click() を通じてその要素をクリックすることをシミュレートして、アプリケーションを起動できます。ただし、現在の画面にない場合は機能しないため、回避する必要があります。まずホームに戻って、このページまでスクロールする必要があります。面倒そうですが、もっと直接的な方法はないでしょうか?次に、airtest.core.api で start_app("bundle-id") を使用する必要があります。この API では、アプリケーションのバンドル ID を指定する必要があります。

アプリケーションが起動したら、スナップショットを使用してスクリーンショットを撮ることができます。画像の管理を容易にするために、生成されたスクリーンショットの保存パスを指定する必要があります。

snapshot(filename="/Users/xxx/Desktop/book/1.png")

スクリーンショットを撮った後、次のページに進むことをシミュレートする必要があります。ここではスワイプ方法を使用します。

swipe(v1=(300,900), vector=[-0.2365, 0.0053])

スワイプ方式ではスクロールする位置と距離を指定する必要があり、距離はxyという2つの値を含むベクトルであり、画面サイズに比例します。

最後に、ページめくりが終了したかどうかを判断する必要があります。各本を読み終えると「本が完了しました」という文字が 3 つ表示され、その下に完了アイコンがあることを考慮して、この全体を判断のシンボルとして使用することにしました。左側の Airtest アシストの [exists] メソッドをクリックすると、コードが編集領域に挿入され、識別する領域を選択するように求められます。マウスを使用して、右側のデバイスのリアルタイム画面内の領域を選択します。この時点で、この領域のスクリーンショットがコードに挿入されます。

 最後に、Python の Fitz ライブラリを使用して、複数の画像を PDF ファイルに結合できます。まだ効果が確認できます。

Python 画像から PDF への参照コード:

import glob
import fitz
import os

def pic2pdf():
    doc = fitz.open()
    for img in sorted(glob.glob("/Users/xxx/Desktop/book/*")): # 读取图片,确保按文件名排序
        print(img)
        imgdoc = fitz.open(img) # 打开图片
        pdfbytes = imgdoc.convert_to_pdf() # 使用图片创建单页的 PDF
        imgpdf = fitz.open("pdf", pdfbytes)
        doc.insert_pdf(imgpdf) # 将当前页插入文档
        if os.path.exists("/Users/xxx/Desktop/allimages.pdf"):
            os.remove("/Users/xxx/Desktop/allimages.pdf")
        doc.save("/Users/xxx/Desktop/allimages.pdf") # 保存pdf文件
        doc.close()

if __name__ == '__main__':
    pic2pdf()

4. まとめ

        最後に、円形ボタンのスクリーンショットを撮るなど、このソリューションにはいくつかの問題も考慮する必要がありますが、もちろんアシスタントでオフにすることもできます。本のページ数が多いことを考えると、この方法で本の完全なスクリーンショットを撮るにはかなりの時間がかかります。この期間中、多くのプッシュ メッセージが携帯電話の上部に表示され、本の内容自体が見えにくくなることがあります。最後に、著作権の要素を考慮して、このプログラムは学習とコミュニケーションのみを目的としており、配布には使用しないでください。この記事では、自動テスト フレームワーク Airtest の基本的な使用法を学び、習得するために、スクリーンショットを撮って電子書籍を保存するという興味深い例を使用しています。

Supongo que te gusta

Origin blog.csdn.net/Mamong/article/details/132230842
Recomendado
Clasificación