Selenium WebDriver を使う (C#) (2)

前回 は WebDriver を使ってブラウザを起動する方法を確認しました。
今回は HTML 要素の取得について確認します。

WebDriver で行えることは、「Web ページの操作」です。Web ページの操作の大部分は HTML の要素を操作することです。
つまり HTML の要素を扱うことが WebDriver で行うことのメインになります。

HTML 要素の操作の第一段階として、まずは HTML 要素に相当するオブジェクトを得る必要があります。
そのオブジェクトは、ドライバクラスの FindElement/FindElements メソッドを使用して取得します。

どの HTML 要素を取得するかをどうやって指定するか、その指定の仕方には、HTML タグ名や CSS セレクタXPath などがあり、そのどれを使うかは、FindElementXXX メソッドを使い分けるか、By クラスを使用して使い分けるかのいずれかになります。

// ID属性を指定して取得 FindElementById メソッドを使う
var element = driver.FindElementById("hoge");
// 他にも
// CSSセレクタで取る driver.FindElementByCssSelector とか
// name 属性で取る driver.FindElementByName とか
// XPath で取る FindElementByXPath とかがある

// XPath を指定して取得 By クラスを使う
var element2 = driver.FindElement(By.Id("hoge"));
// 他にも By.CssSelector とか By.Name とか、FindElementByXXX に対応した By メソッドがある
// というよりも FindElementByXXX の方が By を使わないですむ糖衣構文のようなもの

上記の2つは同じことをしていますが、ID 属性を指定して取得する専用のメソッド を使用するか、By オブジェクトによって方法を伝えるか の違いがあります。

いずれの方法を用いても、これにより IWebElement のオブジェクトを取得することができます。これが1つの HTML 要素に対応するオブジェクトです。
このオブジェクトを通じて、HTML 要素を操作します。

// タグ名を取得
var tagName = element1.TagName;

// innerText を取得
var text = element1.Text;

// class 属性の値を取得
var classValue = element1.GetAttribute("class");

// 要素をクリック
element1.Click();