SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

WebDriverの採用で生まれ変わったOSSのブラウザテストツール「Selenium 2」入門

「Selenium2」のインストール手順と初めの一歩

WebDriverの採用で生まれ変わったOSSのブラウザテストツール「Selenium2」入門 第2回

  • X ポスト
  • このエントリーをはてなブックマークに追加

3 WebDriverの動作確認

 WebDriverの基本を確認しながら、Firefox、IE、Chromeの3つのブラウザでテストを実行してみましょう。

3.1 WebDriverの基本のキ

 先ほどSelenium IDEからエクスポートしたGoogleTest.javaをEclipseにインポートし、中身を確認します。

 setUp()メソッドは、でブラウザを操作するためのWebDriverクラスを生成し、ブラウザを起動しています。では要素が見つからない場合の待機時間を指定しています。30秒だと長すぎる場合がほとんどだと思いますので、10秒くらいに変更しておきましょう。

  @Before
  public void setUp() throws Exception {
    driver = new FirefoxDriver(); // ①ブラウザを起動
    baseUrl = "https://www.google.co.jp/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); // ②要素が見つからない場合の待機時間
  }

 testGoogle()メソッドはで指定したURLのページを開き、で入力項目をクリアし、で検索キーワードを入力しています。は検索ボタンのクリック、は検索結果のリンクをクリックしています。

  @Test
  public void testGoogle() throws Exception {
    driver.get(baseUrl + "/"); // ③ページを開く
    driver.findElement(By.id("lst-ib")).clear();// ④フォームをクリア
    driver.findElement(By.id("lst-ib")).sendKeys("Selenium"); // ⑤文字を入力
    driver.findElement(By.name("btnK")).click();// ⑥ボタンをクリック
    driver.findElement(By.linkText("Selenium - Web Browser Automation")).click();// ⑦リンクをクリック
  }

 ではfindElement()メソッドを使用して画面の要素を取得しています。引数にidやname、CSSセレクタを指定します。

 のget()とのfindElement()は、ブラウザを操作するためのクラスであるWebDriverのメソッドです。のclear()とsendKeys()とclick()は、画面要素を扱うためのクラスであるWebElementのメソッドです。

 この2つのクラスを使いこなせば、ほとんどのことができますので、APIをよく読んでおきましょう。

 tearDown()メソッドでは、でブラウザを閉じています。

  @After
  public void tearDown() throws Exception {
    driver.quit(); // ⑧ブラウザを閉じる
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
  }

3.2 Firefoxで実行

  1. GoogleTest.javaを選択してJUnitTestを実行します。
  2. Firefoxが起動し、テストが実行されることを確認します。

3.3 IEで実行

 (1)①のようにコードを書き換えます。

  @Before
  public void setUp() throws Exception {
    driver = new InternetExplorerDriver(); // ①IE用に書き換え
    baseUrl = "https://www.google.co.jp/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

 (2)JunitTestを実行し、IEが起動してテストが実行されることを確認します。

 (3)以下のように、“lst-ib”というIDが見つからないというエラーが発生します。

org.openqa.selenium.NoSuchElementException: Unable to find element with id == lst-ib (WARNING: The server did not provide any stacktrace information)

 Googleの画面を確認すると、FirefoxでアクセスしたときとIEでアクセスしたときでHTMLが異なっているためにエラーになったことが分かりました。

 (4)以下のようにコードを修正し、ブラウザによって処理を分けます。でWebDriverが使用しているブラウザ名を取得しています。

  @Test
  public void testGoogle() throws Exception {
    driver.get(baseUrl + "/");
    String browserName = ((HasCapabilities) driver).getCapabilities()
        .getBrowserName(); // ブラウザ名を取得
    if (browserName.equals("firefox")){
        driver.findElement(By.id("lst-ib")).clear();
        driver.findElement(By.id("lst-ib")).sendKeys("Selenium");
        driver.findElement(By.name("btnK")).click();
    } else {
        driver.findElement(By.name("q")).clear();
        driver.findElement(By.name("q")).sendKeys("Selenium");
    }
    driver.findElement(By.linkText("Selenium - Web Browser Automation")).click();
  }

 (5)JunitTestを実行し、IEが起動してテストが正常に終了することを確認します。

3.4 Chromeで実行

 (1)以下のようにコードを書き換えます。ではChrome.exeのロケーション、ではchromedriver.exeのパスを設定しています。なお、chromedriver.exeのパスはIEと同様に環境変数でパスを通してもOKです。

  @Before
  public void setUp() throws Exception {
    DesiredCapabilities capabilities = DesiredCapabilities.chrome();
    capabilities.setCapability("chrome.binary", "C:/Program Files (x86)/Google/Chrome/Application"); // ③Chrome.exeのロケーション
    System.setProperty("webdriver.chrome.driver", " C:/chromedriver_win32/chromedriver.exe"); // ④chromedriver.exeのパス
    driver = new ChromeDriver(capabilities);
    baseUrl = "https://www.google.co.jp/";
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
  }

 (2)JunitTestを実行し、Chromeが起動してテストが実行されることを確認します。

※1

 Proxy経由でインターネットに接続している場合、次のようなエラーになることがあります。

org.openqa.selenium.WebDriverException: chrome not reachable

 この場合、[インターネットオプション]-[接続]-[LANの設定]-[ローカルアドレスにはプロキシサーバーを使用しない]にチェックを入れてください。

次のページ
4 WebDriverの使い方

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
WebDriverの採用で生まれ変わったOSSのブラウザテストツール「Selenium 2」入門連載記事一覧

もっと読む

この記事の著者

丸山 和子(株式会社DTS)(マルヤマ カズコ)

株式会社DTS イノベーション推進部在籍。業務内容は、システム開発に役立つ技術の調査・研究。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7456 2013/11/08 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング