try T-Dash test automation

# Outline

ローコードのtest automation toolとしてT-Dashがある。
”誰でもかんたん”が売りのようなので、どこまで複雑な処理がテスト自動化できるか試してみた

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


T-DashはMablやAutifyと違いlocalで動かすことが前提である。
Cloud環境で利用するか、local(オンプレ）で動かしたいかでまず大きく使用判断が異なるようだ。

# target scenario

先日、Mablで試したシナリオをT-DashでもTRYしてみる。

1. loginする
2. 投票ページに遷移する
3. 指定した競馬場・レース番号を選ぶ
4. 単勝の馬番 x を購入する <- データ駆動で任意の馬番を複数選ぶ
5. 投票を完了する

<IMG SRC="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/dcf05333-6d27-4505-31f2-19839d0a6af1.png" Width=200>
<IMG SRC="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/76f19dfa-af46-f006-5a2b-f2bb694d1746.png" width=200>
<IMG SRC="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/985bca7c-9706-be4a-21fd-8909dab4b5a2.png" width=200>
<IMG SRC="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/cbbba699-aa77-c0fe-0eed-fad3407f3607.png" width=200>



https://qiita.com/emurin/items/4c311914538d76ff1bb2#%E8%A6%81%E7%B4%A0%E3%82%92%E5%A4%89%E6%95%B0%E3%81%A7%E6%8C%87%E5%AE%9A%E3%83%87%E3%83%BC%E3%82%BF%E9%A7%86%E5%8B%95


# 実際のスクリプト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/1cee7c4e-5e44-6ac1-8087-139fa2677440.png)

各テストケースの処理詳細

1. Login : Login
2. goto-bet-page : 投票ページに遷移して、 指定した競馬場・レース番号を選ぶ
3. choose-Tansho-x Uma : 単勝の馬番 x を購入する
4. complete-bet : 投票を完了する


## 1. Login

Login test caseは特にはまるところはなかった。
ボタンクリックと入力フォームへテキスト入力する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/2c406f2a-c05d-ca6a-f5cd-efdc337ea7d8.png)

尚、このLoginのstepは使いまわしのできる動作セット（共通モジュール）にできるのではないか？と思う人がいるでしょう。今回動作セットにしませんでした。

動作セットにすると、以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/c958f7a5-353f-2adf-f5d8-612ca740a224.png)

この動作セットを使ったテストケースで、データ駆動を設定しようとすると、データ駆動の変数として選ぶことができない！！！　
ここは、改善してほしいところだなと思う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/c2a33785-7f39-4824-d30d-bc9e486c4636.png)




## 2. goto-bet-page

STEPはそこまで難しくはなかった。
ただ、画面定義をするところに工夫が必要だった。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/c3306db9-6ff3-f317-f70b-52d3fe511584.png)

指定した競馬場・レース番号を特定するには工夫がいる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/c76a84cf-74f3-9bd1-5d52-5b7faec17b12.png)

developer toolで園田11Rの要素のxpathを取得してみると、以下の値になった。

```
//*[@id="voteContents"]/div/ul[2]/li[1]/table/tbody/tr[3]/td[14]/a/span
```

これは競馬場の表で３行目、１４列目（ダート・芝・天気・1~12R ）を指す。
これは一見合っているようだが、失敗する。なぜなら、競馬のサービスの特徴として日々開催競馬場が異なるからである。今回、園田が３行目であったが、翌日は４行目になる可能性がある。
そのため、xpathの指定方法を以下のようにする

```
//*[@id="voteContents"]/div/ul[2]/li[1]/table/tbody/tr/th[text()='園田']/../td[14]/a/span[text()='投票']
```
これは、まず園田のセルを特定する。その後、相対パスを用いて園田の行を特定し、その行の１４列目を指定する。

## 3. choose-Tansho-x

ここが一番データ駆動化したかったところだ。結論から言うと、できなかった（購入する馬番号を外だしできなかった）



まず、変数を含めたxpathを画面定義では使えなかったので、カスタム動作を利用した。
robotframeworkを用いて、xpathに変数を含めて、任意の馬番号を選べるようにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/05760862-9929-4eaa-b294-e13500a040a8.png)


```
//tbody[@class='paddockList']/tr/td[5]/a[text()='${value1}']
```
${value1} : 馬番号

このカスタム動作を呼び出すときに、任意の馬番号を指定することができる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/0a30481c-74c4-6b3f-e541-0e987de4aabf.png)

このように、カスタム動作　投票_単勝　を使い、引数に1,2,4,8,16 と任意の馬番を指定するとことでテストケースを構成することができる。
って、ちょっとまってよ。これだと、テストケースの中にデータを埋め込んでいて、データ駆動になってないじゃん。
はい、このカスタム関数を１行記載して、データ駆動設定しようとしたのですが、先述の動作セットと同様にデータ駆動として設定できなかった。
ここもデータ駆動として設定できるようになると、非常にエレガントだと思った。


## 4. complete-bet

完了ステップはそこまで難しくはない。
最後の確認ページで、購入合計金額を入力させるSTEPがある。そこは、合計金額の値を取得して変数にいれる。
その変数を入力フォームで入力するだけでよい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/2838ddaf-e89f-da40-6e7d-29f7f6b33e86.png)


# 実行


実行結果が以下の通り

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/e2a1de0a-e0dd-f094-e24a-e7a874c6b2ae.png)