PyAutoGUIでユーザーフォームのテキストボックスを操作する方法

みなさん,こんにちは。
シンノユウキ(shinno1993)です。

この記事はPyAutoGUIでユーザーフォームのGUIテストを自動化する連載の第4回です.

今回はPyAutoGUIでユーザーフォームのテキストボックスを操作する方法を紹介したいと思います.

では行きましょう!

前回のまとめ

前回の記事はこちらです:

前回はPyAutoGUIを用いて簡単なGUIテストを行ってみました.コードは以下のようになりました:

import pyautogui as pg
import pyperclip

class UserForm:
    pass

class Control:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def click(self, cliks=1, interval=0, button='left', pause=1):
        pg.click(self.x, self.y, clicks=cliks, interval=interval, button=button, pause=pause)

class TextBox(Control):
    pass

class ComboBox(Control):
    pass

class OptionButton(Control):
    pass

class CheckBox(Control):
    pass

class CommandButton(Control):
    pass

if __name__ == "__main__":
    # 左上をクリックしてウインドウをアクティブに
    pg.click(1, 1, pause=2.0)

    # フォームを開く
    btn_show_form = Control(674, 265)
    btn_show_form.click()

    # 名前を入力
    txt_name = TextBox(947,391)
    txt_name.click(pause=1.0)
    pyperclip.copy('名前')
    pg.hotkey('ctrl', 'v')
        
    # 男性ボタンをクリック
    opt_men = OptionButton(915, 446)
    opt_women = OptionButton(915, 492)
    opt_men.click()
    
    # 年齢を選択
    cmb_age = ComboBox(915, 547)
    cmb_age.click()
    pg.press('down')

    # 最終確認1をクリック
    chk_1 = CheckBox(844, 600)
    chk_1.click()

    # 最終確認2をクリック
    chk_2 = CheckBox(844, 630)
    chk_2.click()

    # OKボタンをクリックする
    btn_ok = CommandButton(1040,677)
    btn_ok.click()

    # 終了を知らせる
    pg.alert('終了しました')

今回はその続きです.

テキストボックスを操作してみよう!

ユーザーフォームには多くの部品があります.その中から,テキストボックスに焦点を当てて解説していきます.

テキストボックスに入力するメソッドを作成しよう!

現在の処理

現在の,テキストボックス文字を入力するために,以下のような処理を行っています:

# 名前を入力
txt_name = TextBox(947,391)
txt_name.click(pause=1.0)
pyperclip.copy('名前')
pg.hotkey('ctrl', 'v')

まずはテキストボックスをクリックしてアクティブにします.日本語入力の際は,一度クリップボードにコピーし,それを ctrl + v で貼り付けるという処理をしなければならないのでしたね.

TextBoxクラスにメソッドを定義

せっかくTextBoxクラスを作成しましたので,この文字を入力する処理もTextBoxクラスのメソッドとして定義したいと思います.以下のようなメソッドでどうでしょう:

    def set_text(self, string_):
        self.click()
        pyperclip.copy(string_)
        pg.hotkey('ctrl', 'v')

テキストボックスをアクティブにし,その後,引数に指定した文字列をテキストボックスに入力しています.なお,引数の後ろにアンダースコアをつけているのは,stringをPythonのキーワードでなく変数として使うことを示したかっただけなので,それほど気にする必要はありません.このメソッドを使うことで,メインルーチンは以下のように簡潔に書けるようになります:

# Before 
    txt_name = TextBox(947,391)
    txt_name.click(pause=1.0)
    pyperclip.copy('名前')
    pg.hotkey('ctrl', 'v')

# After
    txt_name = TextBox(947,391)
    txt_name.set_text('名前')

テキストボックスをクリアするメソッドを作成しよう!

入力する処理があるならクリアする処理も必要

テキストボックスに入力する処理を定義しました.であれば,当然ながらテキストボックスをクリアする処理も必要です.

連続して入力を行う場合,ユーザーフォーム側の処理によって入力ごとにテキストボックスの中身がクリアされれば良いのですが,そこまで期待できない場合もあります.なので,クリアする処理も必要になります.

TextBoxクラスで定義する

せっかくなので,こちらの処理もTextBoxクラスで定義してしまいましょう.以下のようにしました:

    def clear_text(self):
        self.click()
        pg.hotkey('ctrl', 'a')
        pg.press('delete')

PyAutoGUIでは文字を削除するのにも一工夫が必要です.ショートカットキーがあって良かった…!

まずテキストボックスをアクティブにし,ショートカットキー:ctrl + a でテキストボックス内の文字を全選択.その後,delete を押すことで削除しています.

これで,連続入力の際などにもテキストボックスをクリアできます.この処理は後々に使用するようになりますので,とりあえず定義しておきましょう.

まとめ

今回はPyAutoGUIでテキストボックスを操作する方法についてまとめました.全体のコードは以下のようになります.参考にしてください:

import pyautogui as pg
import pyperclip

class UserForm:
    pass

class Control:
    def __init__(self, x, y):
        self.x = x
        self.y = y

    def click(self, cliks=1, interval=0, button='left', pause=1):
        pg.click(self.x, self.y, clicks=cliks, interval=interval, button=button, pause=pause)

class TextBox(Control):
    def set_text(self, string_):
        self.click()
        pyperclip.copy(string_)
        pg.hotkey('ctrl', 'v')
    
    def clear_text(self):
        self.click()
        pg.hotkey('ctrl', 'a')
        pg.press('delete')

class ComboBox(Control):
    pass

class OptionButton(Control):
    pass

class CheckBox(Control):
    pass

class CommandButton(Control):
    pass

if __name__ == "__main__":
    # 左上をクリックしてウインドウをアクティブに
    pg.click(1, 1, pause=2.0)

    # フォームを開く
    btn_show_form = Control(674, 265)
    btn_show_form.click()

    # 名前を入力
    txt_name = TextBox(947,391)
    txt_name.set_text('名前')
        
    # 男性ボタンをクリック
    opt_men = OptionButton(915, 446)
    opt_women = OptionButton(915, 492)
    opt_men.click()
    
    # 年齢を選択
    cmb_age = ComboBox(915, 547)
    cmb_age.click()
    pg.press('down')

    # 最終確認1をクリック
    chk_1 = CheckBox(844, 600)
    chk_1.click()

    # 最終確認2をクリック
    chk_2 = CheckBox(844, 630)
    chk_2.click()

    # OKボタンをクリックする
    btn_ok = CommandButton(1040,677)
    btn_ok.click()

    # 終了を知らせる
    pg.alert('終了しました')

連載目次

  1. PyAutoGuiでVBAのユーザーフォームのGUIテストを自動化する!
  2. PyAutoGUIを始める第一歩と基本的な使い方を紹介します
  3. PyAutoGUIでユーザーフォームの 簡単なGUIテストをやってみる
  4. PyAutoGUIでユーザーフォームのテキストボックスを操作する方法現在のページ
  5. PyAutoGUIでユーザーフォームのコンボボックスを操作する方法
  6. PyAutoGUIでユーザーフォームのチェックボックスのチェックを全て外す方法|画像認識の活用
  7. PyAutoGUIでユーザーフォームのテストデータをExcelファイルから読み取る方法
  8. PythonファイルをEXEファイル化する「Pyinstaller」の使い方を紹介します
タイトルとURLをコピーしました