2022/07/02 伊勢IT交流会
Web UIテスト自動化を
してみた話
もやし工房
石黒 光茂
@koike_moyashi
mitsushige.ishiguro
もやし工房
UIテストとは
UIテスト?
UIテストとは
UIテスト
ユーザーが実際に操作するように、画面の要素を操作するテスト。
テキストボックスへの入力や、ボタンなどの操作をテストします。
E2Eテスト(End to end テスト)
UIテストを使ってシステム全体をテストすること。
最近はUIテストとE2Eテストはよく似た意味で使われてる気がする。
解決するには?
ブラウザを自動的に動かし
色々な操作をし、
想定しているテキストなどが出てるかをチェック
解決するには?
ブラウザを自動的に動かし
色々な操作をし、
想定しているテキストなどが出てるかをチェック
最初は良いけど、失敗する
小粒は動くけど、あれこれテストするにはあまり良い思い出は無い
ブラウザを自動的に動かす
•いい感じに自動的に動かすソフトがある。
•ログインしてタイムカードを押す。
ネットスーパーで決まった商品をどんどんカーに
入れていくなどの定型業務とかも自動化できる。
•有料、無料あり
Selenium
Selenium(セレニウム)
ブラウザ拡張(Selenium IDE)
ブラウザ操作を記録し再生
プログラム書いて操作(Selenium WebDriver)
Java, Ruby, Perl, C#, NodeJS, Python, PHP他
情報も多く、できることは沢山ある。
Selenium
Selenium(セレニウム)
ブラウザ拡張(Selenium IDE)
ブラウザ操作を記録し再生
プログラム書いて操作(Selenium WebDriver)
Java, Ruby, Perl, C#, NodeJS, Python, PHP他
情報も多く、できることは沢山ある。
ただ、遅い&失敗する。良い思い出が無いのもこのソフト
Selenium
失敗例
• タイミングで失敗(ページが完全に読み込まれていないのに次を実行的な)
waitやsleepを沢山入れないとまともに動かない(印象)
• ブラウザ(自動更新してしまったなど)とWebDriverのバージョンが合わずに動かない
• Webの要素が(Class、ID等)変わったせいで、
クリック対象などが見つからず失敗(ちなみにこれは後述のソフトでも一緒)
Selenium
失敗例
• タイミングで失敗(ページが完全に読み込まれていないのに次を実行的な)
waitやsleepを沢山入れないとまともに動かない(印象)
• ブラウザ(自動更新してしまったなど)とWebDriverのバージョンが合わずに動かない
• Webの要素が(Class、ID等)変わったせいで、
クリック対象などが見つからず失敗(ちなみにこれは後述のソフトでも一緒)
Seleniumはなんとなくちょっと嫌だなぁ... 今どきは何を使うのだろう?
Playwright
Playwright
https://github.com/microsoft/playwright
• Microsoftが中心となって作っている
• JavaScript, Java, Python, and .NET C#
• いい感じの仕組みで、wait、sleep地獄からは開放されるらしい。
• Puppeterと言う同種ツールの実質的な後続ソフト(開発者が移籍?)。
• 今どきはこっちだ!
※ちなみに最近のSeleniumは触って無いので、もうちょっと良い感じになっているのかもしれません。
Selenium vs Playwright
Criteria Playwright Selenium
Language Supports multiple languages such as JavaScript,
Java, Python, and .NET C#
Supports multiple languages such as Java,
Python, C#, Ruby, Perl, PHP, and JavaScript
Ease of Installation Easy to Install Easy to Install
Test Runner Frameworks Supported Mocha, Jest, Jasmine Mocha, Jest, Jasmine, Protractor, and
WebDriverIO
Prerequisites NodeJS should be installed Java, Eclipse IDE, SeleniumStandalone Server,
Client Language Bindings, and Browser Drivers
should be installed
Operating Systems Supported Windows, Linux, and Mac OS Windows, Linux, Solaris, and Mac OS
Open Source Open Source and Free Open Source and Free
Architecture Headless Browser with event-driven
architecture
Layered Architecture based on JSON Wire
Protocol
Browsers Supported Chromium, Firefox, and WebKit Chrome, Firefox, IE, Edge, Opera, Safari, and
more
Support Since Playwright is fairly new, the support from
the community is limited as compared to
Selenium
Provides commercial support for its users via its
sponsors in Selenium Ecosystem along with
self-support documents. Strong community
support from professionals across the world
Real Devices Support Does not support real devices but supports
emulators
Supports real device clouds and remote servers
https://www.browserstack.com/guide/playwright-vs-selenium
Selenium vs Playwright
•どっちが優れていると言うのではなく、
適材適所が良さそう
•例えば 簡単に記録→再生したいだけなら
Selenium IDE
インストール
$ pip install playwright
$ playwright install
• メインはnode.js
• Pythonの方ではサポートされてない機能とかが ややある
• ブラウザは上記に入ってる(chromium, firefox)ので、今使ってるブラウザには依存しない
ブラウザの操作を記録する / 記録したのを動かす
$ playwright codegen
$ python hoge.py
codegenで出てきたコードをコピペして、
pythonで実行するだけ。
操作の記録
再生
いい感じツールが起動して→
ブラウザポチポチでコードを作ってくれる。
テストとして動かす
・「今日の天気」が出ていて、「気温」に何らかの数字が入っている場合を正常とする
・画像比較みたいなのも使えるらしい
テストとして動かす
tenkipage = page.locator("#yjw_pinpoint_today h3").text_content()
assert '今日の天気' in tenkipage
とある部分に「今日の天気」と入っているか?を確認する例
駄目だったら失敗させてスクリーンショットを取るみたいなのも簡単(動画も撮れる)
こんな感じでブラウザ画面なしで、次々実行してくれる
感想
• ちゃんと動く
• codegenそのままでは動かない場所もあったが、
コードが見やすいので変更しやすい
• コードが見やすいのである程度メンテもしやすい(ような気がする)
• スクリーンショット、動画記録など標準で用意されてるので、
Pythonの機能であれこれするのもそこまで難しくない(ような気がする)
画像比較して○%以上異なってたら(←と言うライブラリを使う)、比較画像をSleckにPOSTするとか
• スピードは期待してたほど、早くは感じなかった。
• 情報はSeleniumに比べるとやっぱり少なめ。
Seleniumで苦しんだ経験がある人は一度使ってみても良いかも。

ブラウザのUIテストをしてみた話