読者です 読者をやめる 読者になる 読者になる

53歳限界プログラマの憂鬱

SU/CAR-ST-APplication-cellsから派生したプログラマのブログ

本家はこちら↓
f:id:sucar:20151115183011p:plain

SU/CAR-ST-APplication-cellsの安倍野ミックスと申します
来訪ありがとうございます
シストレツールを自作してます

f:id:sucar:20150414193802p:plain

ちょっと強引なSelenium IDE の活用法

発注業務を半自動で実行できる支援システムをSelenium IDE 使ってテスト的運用中ですが、結構使えますねこれ

まあ、ちょっと強引なやり方でやってまして、、、

Seleniumググる

と言ったプログラム言語と組み合わせて制御する方式があることがわかる

が、実はどれもちょっと勉強しないと使えない自分w

ということでとりあえずSelenium IDEで簡単に済ませようというのですが、ちょっと強引にawkとm4を使ってやろうと、、、、、

Selenium IDEでのテストケースは単なるhtmlなので、最初に記録させたテストケースをテンプレートにして、外部プログラムで強引に変数やらループ構造を展開させたhtmlを出力させ、それをselenium IDEで実行させればよい、との発想

テストケースのhtmlには変数を持たせられるし、javascriptの埋め込みもできるらしく、またループ構造も工夫すればできるようですが、そういうプログラム的な要素は一切廃止して、単にデータとして扱うことに徹する方針(その方が現時点の習熟度では楽なので)

以下どんな感じか簡単に説明

f:id:sucar:20160507202133p:plain

こんな発注データをkabucom3a.csvとして準備

これを食わせると、m4マクロ定義ファイルを吐くawk script を作成

kabucom3a.awk

-------------------------------------

BEGIN { FS="," }
NR>1 {
close(out) # ファイルオープンの数に限りがあるので都度close
out = sprintf("./kabucom.m4/%s",$1)
printf("define(`_mmmm_',`%s')\n",$1) > out
printf("define(`_kb_',`%s')\n",$2) > out
printf("define(`_en_',`%s')\n",$3) > out
}
END{}

-------------------------------------

awkガナス(6) – 複数ファイルへの出力(リダイレクト機能) — SOUM/misc

(↑ここを参考にしました)

これにより例えば

define(`_mmmm_',`1757')
define(`_kb_',`3100')
define(`_en_',`2')

こんなやつができます

このマクロを使ってテストケースを作成するコマンドがこんな感じ

kabucom3a

-----------------------------------

rm ./kabucom.m4/*
rm ./kabucom/*
cat ./kabucom3a.csv | awk -f ./kabucom3a.awk
cat ./kabucom3a.html.head > ./kabucom/all.html
for var in `ls ./kabucom.m4`
do
  cat ./kabucom.m4/$var kabucom3a.html > tmp.txt
  m4 tmp.txt >./kabucom/$var.html
  cat ./kabucom.m4/$var kabucom3a.html.tr > tmp.txt
  m4 tmp.txt >>./kabucom/all.html

done

cat ./html.end >> ./kabucom/all.html

----------------------------------

で出力された./kabucom/all.html をselenium ide で実行すれば、発注作業が半自動で、、、

かなり便利

こういう方法でよければ、プログラム言語は何でもいいので、最終的にはシグナルを出しているR言語C言語selenium ide のテストケースを出力するというのも可能

今のところ発注前にいろいろ確認したいので、一度エクセルでいろいろやってからcsvファイルにしてるけど

ここまでの説明???な感じでしょうけどw

kabucom3a.html.trの中身が

----------------------------

<tr>
<td>waitForElementPresent</td>
<td>name=Keyword</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>name=Keyword</td>
<td>_mmmm_</td>
</tr>
<tr>
<td>clickAndWait</td>
<td>css=input[type=&quot;submit&quot;]</td>
<td></td>
</tr>
<tr>
<td>type</td>
<td>id=InputBuyModel_Quantity_Value</td>
<td>_kb_</td>
</tr>
<tr>
<td>click</td>
<td>id=InputBuyModel_WebOrderType_Value_PMSASHINE</td>
<td></td>
</tr>
<tr>
<td>select</td>
<td>id=InputBuyModel_PlusMinusSashine_TriggerPriceSign_Value</td>
<td>label=-</td>
</tr>
<tr>
<td>type</td>
<td>id=InputBuyModel_PlusMinusSashine_TriggerPriceRelative</td>
<td>1</td>
</tr>
<tr>
<td>select</td>
<td>id=InputBuyModel_PlusMinusSashine_UnderOrOver_Value</td>
<td>label=以下</td>
</tr>
<tr>
<td>click</td>
<td>id=InputBuyModel_PlusMinusSashine_AfterHitFrontOrderType_Value</td>
<td></td>
</tr>
<tr>
<td>select</td>
<td>id=InputBuyModel_PlusMinusSashine_AfterHitPriceSign_Value</td>
<td>label=-</td>
</tr>
<tr>
<td>type</td>
<td>id=InputBuyModel_PlusMinusSashine_AfterHitPriceRelative</td>
<td>_en_</td>
</tr>
<tr>
<td>click</td>
<td>id=InputBuyModel_DelivType_Value_Oazukari</td>
<td></td>
</tr>

----------------------------

こんななってるのだけど

赤字のところがm4で置き換えられる仕組み

これで、変数とかを使わず、csvの中身を展開したテストケースが作成できるw

やっぱりわかりにくいですかね?