Selenium Conf ’16 こぼれ話: テストのバグを見つけてドローンを当てよう!
この記事はSelenium/Appiumアドベントカレンダー2016の13日目の記事です。
石川@hifive開発チームです。
先日、SeleniumConf’16に参加してきました。
(私のチームでPitaliumというSeleniumベースのテストライブラリを開発しており、Selenium周りの情報収集が主な目的です。)
http://2016.seleniumconf.co.uk/
SeleniumConfはSeleniumのコミッター・ユーザのためのカンファレンスで、
ワークショップ(1日目)やセッション(2,3日目)が催されます。
今回はセッションの紹介ではなく、カンファレンスで見かけた小ネタをご紹介します。
会場内には「休憩所兼スポンサー展示コーナー」のような部屋があり、
セッションの合間も参加者の方々は紅茶を飲みながら盛んに議論を交わしていました。
そんなスポンサー展示コーナーの一角で、おもしろいパネルを発見。

テストのバグを見つけてドローンを当てよう!
パネルにはこう書かれています。
(意訳)
なぜこのテストは失敗するのでしょうか?
Seleniumスクリプトのエラーを見つけられた方の中から抽選でドローンをプレゼント!
このパネルはSeleniumConfのメインスポンサーであるSauceLabs社が、参加者向けにプレゼント企画を行っているものでした。
スクリプトは下記のとおりです。皆さんはどこにエラーが隠れているか、わかりますか?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.net.URL; | |
import org.openqa.selenium.WebDriver; | |
import org.openqa.selenium.WebElement; | |
import org.openqa.selenium.remote.DesiredCapabilities; | |
import org.openqa.selenium.remote.RemoteWebDriver; | |
public class SampleSauceTest { | |
public static final String URL = "http://Username:Access_Key@example.com:80/wd/hub"; | |
public static void main(String[] args) throws Exception { | |
DesiredCapabilities capabilities = DesiredCapabilities.chrome(); | |
capabilities.setCapability("platform", "Windows 10"); | |
capabilities.setCapability("version", "48.0"); | |
WebDriver driver = new RemoteWebDriver(new URL(URL), capabilities); | |
driver.get("https://example.com"); | |
WebElement freeTrialButton = driver.findElement("signup"); | |
freeTrialButton.click(); | |
driver.quit(); | |
} | |
} |
https://gist.github.com/meganetaaan/713df708b371fe3ea321d628523f2eaa#file-samplesaucetest-java
↓
↓
↓
正解発表です!
答えはテストコードをコンパイルしようとするとすぐに分かります。
実はこのJavaコード、実行はおろかコンパイルさえ通りません。
なぜならこの一文がWebDriverのインタフェースに反しているからです。
WebElement freeTrialButton = driver.findElement("signup");
WebDriver#findElement()は文字通り「DOM要素を見つける」メソッドですが、
呼び出しの際はidを指定するのか、cssセレクタを与えるか、など、
「要素を検索する方法(location strategy)」を明示しなくてはいけません。
問題文の場合は、「By」クラスのオブジェクトをfindElementの引数に与えることで
検索方法を明示します。
WebElement freeTrialButton = driver.findElement(By.id("signup"));
さてこの企画、カンファレンスを締めくくる「コミッターパネル討論」の冒頭で抽選が行われました。
抽選の様子はセッションの動画をご覧ください。
ちなみに85人が回答して70人が正解したそうです(私も正解しましたが、抽選には落ちました…)。
さらに、不正解だった15人の中から抽選で「Seleniumオンライントレーニング1年分」が
プレゼントされていました。
個人的にはこちらのほうがうれしいですね!
上記のクロージングセッションの他にも、実はSeleniumConfのセッションは全て動画が公開されていますので、ぜひチェックしてみてください。
https://www.youtube.com/channel/UCtqHXVoR7QSJARfhZ4dts1g/
以上、今回は小ネタのご紹介でしたが、今週末に開催されるSelenium勉強会にて、カンファレンス全体のレポートをします。
第4回 日本Seleniumユーザーコミュニティ勉強会 – connpass
「誰でも枠」は既に定員が埋まっていますが、キャンセル待ちを狙えば間に合うかもしれませんね。
あとは「勉強会&懇親会枠」が現在1名空いています。カンファレンスの裏話など興味ある方はぜひお話しましょう!
なお、勉強会に参加できない方も、SeleniumConfの発表資料は後日公開予定ですので楽しみにお待ちください!
コメントは受け付けていません。