[T-DASH] マウス操作を座標軸をもとに行う with PyAutoGUI

# Outline

T-DASHでは画面要素を簡単に取得でき、テスト自動化を実現することができる。
ただし、CANVASなどを用いたWEB画面では、要素を特定することが困難である。
その場合、画面上のx,y軸をベースに操作することでテスト自動化を実現することはできる。

ただし、座標軸でテストを行う場合、課題はある
- 画面解像度が異なる環境で動かなくなることがある
- ブラウザや、ブラウザのウィンドウサイズによって動かなくなることがある
- ちょっとしたUI変更で、座標を取り直す必要がある

このように、座標軸を用いることのデメリットを理解したうえで使う必要がある。

https://service.valtes.co.jp/t-dash/


# 技術的な情報

pythonのライブラリ、PyAutoGUIを用いることで実現することができる

https://pyautogui.readthedocs.io/en/latest/

主な機能として
- マウスの操作を座標軸を指定して行うことができる
- ドラッグ＆ドロップを再現することができる
- キーボード処理、スクリーンショット機能などもある

今回は、マウス操作を主に使用する。

# T-DASH

## カスタム動作

### python ライブラリ

以下スクリプトをlib_pyautogui.pyのファイル名として保存する


``` @lib_pyautogui.py
#
# reference 
#  https://pyautogui.readthedocs.io/en/latest/index.html
#
#0,0       X increases -->
#+---------------------------+
#|                           | Y increases
#|                           |     |
#|   1920 x 1080 screen      |     |
#|                           |     V
#|                           |
#|                           |
#+---------------------------+ 1919, 1079

import pyautogui
import time

def move_mouse_to(str_x, str_y):
	x = int(str_x)
	y = int(str_y)
	pyautogui.moveTo(x, y)

def click_mouse_left(str_x, str_y):
	x = int(str_x)
	y = int(str_y)
	pyautogui.click(x, y)

def click_mouse_right(str_x, str_y):
	x = int(str_x)
	y = int(str_y)
	pyautogui.click(x, y)

def click_mouse_double(str_x, str_y):
	x = int(str_x)
	y = int(str_y)
	pyautogui.doubleClick(x, y)

def mouse_drag_to(str_x, str_y):
	x = int(str_x)
	y = int(str_y)
	time.sleep(1)
	pyautogui.dragTo(x, y, duration=1.0, button='left')

def mouse_scroll_wheel(str_v,):
	v = int(str_v)
	pyautogui.scroll(v)

```

①作成したpython scriptを自作ライブラリのフォルダに格納する

②配置後、Libraryの追加を行う
（lib_pyautogui.pyをフォームに入力し、⊕ボタンをクリックする）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/2a9fae25-82cb-9029-4780-17e2558661c2.png)

### robotframework library
以下設定ファイルを Custom.yamlで保存する


``` @Custom.yaml
ACT-CAT-CUSTOM-6a8a2f90-b3cc-44c4-aca3-23e8684421de:
  action_category_name: Custom
  icon: ''
  color: '#0ad4bf'
  custom_data:
    file_name: custom
    pip_list:
    - pyautogui
    library_list:
    - lib_pyautogui.py
  actions:
    ACT-CUSTOM-ea69a8c7-f48f-45f5-9924-9e08ec786dd5:
      action_name: マウス左クリック
      action_type: operation
      action_format: x=「設定値1」, y=「設定値2」をマウス左クリック
      action_note: ''
      action_args:
      - value1
      - value2
      action_def:
      - - click_mouse_left
        - ${value1}
        - ${value2}
    ACT-CUSTOM-daa28828-c879-4aa4-878d-df856ccbbf5a:
      action_name: マウス右クリック
      action_type: operation
      action_format: x=「設定値1」,y=「設定値2」でマウス右クリック
      action_note: ''
      action_args:
      - value1
      - value2
      action_def:
      - - click_mouse_right
        - ${value1}
        - ${value2}
    ACT-CUSTOM-3148bab5-cde6-4be4-ae92-93d0c2109bd3:
      action_name: マウスダブルクリック
      action_type: operation
      action_format: x=「設定値1」,y=「設定値2」でマウスダブルクリック
      action_note: ''
      action_args:
      - value1
      - value2
      action_def:
      - - click_mouse_double
        - ${value1}
        - ${value2}
    ACT-CUSTOM-95e80531-00e6-46e5-b268-3d2c7751535b:
      action_name: マウスを動かす
      action_type: operation
      action_format: x=「設定値1」,y=「設定値2」にマウスカーソルを動かす
      action_note: ''
      action_args:
      - value1
      - value2
      action_def:
      - - move_mouse_to
        - ${value1}
        - ${value2}
    ACT-CUSTOM-bcd2fcda-3081-4474-93f6-f9ad4d7c98a1:
      action_name: マウスでドラッグする
      action_type: operation
      action_format: 現在地からx=「設定値1」,y=「設定値2」にマウスドラッグする
      action_note: ''
      action_args:
      - value1
      - value2
      action_def:
      - - mouse_drag_to
        - ${value1}
        - ${value2}
    ACT-CUSTOM-bcba6c5c-1a3e-4c22-a8ef-c7609ecee46e:
      action_name: マウスのホイールをスクロールする
      action_type: operation
      action_format: マウスのホイールを「設定値1」だけスクロールする
      action_note: ''
      action_args:
      - value1
      action_def:
      - - mouse_scroll_wheel
        - ${value1}
```

次に、Custom.yamlをT-DASHの動作定義 -> カスタム動作 -> カスタム動作をインポート にてインポートし、実際にインポートされた設定内容を開く

以下のように、６つのマウス操作のカスタム関数が作成される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/78e94d38-0c22-5be1-efd7-cb94a702d7a3.png)


## テストケース

基本的に、マウス操作を行いたい座標軸x,yを引数に設定する。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/c10e22ec-58bf-56e1-7fa7-7446804e6bd6.png)