C# で Selenium2(WebDriver) を使ってみる
.NET 用のも出ているので試してみる。
NuGet Install-Package で次の2つをインストールします。
Install-Package Selenium.WebDriver Install-Package Selenium.Support
NuGet Gallery Selenium.WebDriver
NuGet Gallery Selenium.Support
Selenium.WebDriver だけでも動くけど、Support があると、ここらへんで紹介した PageFactory や Wait 等が使えるようになります。
Selenium2 PageFactory の紹介 - お だ のスペース
Selenium2 で wait 処理 - お だ のスペース
単純なログインページのコードはこんな感じです。*1
Signin.cs
using System; using OpenQA.Selenium; using OpenQA.Selenium.Support.PageObjects; using OpenQA.Selenium.Support.UI; namespace Sample.PageObjects { public class Signin { internal IWebDriver Driver { get; set; } [FindsBy(How=How.Name, Using="login")] IWebElement UserId { get; set; } [FindsBy(How=How.Name, Using="passwd")] IWebElement Password { get; set; } [FindsBy(How = How.XPath, Using = "//input[@type='submit' and @value='サインイン']")] IWebElement Submit { get; set; } private static readonly TimeSpan TIMEOUT = new TimeSpan(0, 0, 10); // 10秒 private static readonly By MENU_LOCATOR = By.Id("c_content"); public static Signin CreateInstance(IWebDriver driver) { var url = "https://login.live.com/login.srf"; driver.Url = url; var wait = new WebDriverWait(driver, TIMEOUT); wait.Until(ExpectedConditions.TitleIs("Windows Live へようこそ")); var login = new Signin() { Driver = driver }; PageFactory.InitElements(driver, login); return login; } public Menu Login(string userId, string password) { this.UserId.SendKeys(userId); this.Password.SendKeys(password); this.Submit.Click(); var wait = new WebDriverWait(this.Driver, TIMEOUT); wait.Until(ExpectedConditions.ElementExists(MENU_LOCATOR)); var menu = new Menu() { Driver = this.Driver }; menu.Initialize(); return menu; } } }Program.cs
using System; using OpenQA.Selenium.IE; using Sample.PageObjects; namespace Sample { class Program { static void Main(string[] args) { var driver = new InternetExplorerDriver(); var login = Signin.CreateInstance(driver); var menu = login.Login("UserID", "Password"); ... } } }
※InternetExplorerDriver を使う場合は、InternetExplorerDriver - selenium - Everything you wanted to know about the Internet Explorer driver - Browser automation framework - Google Project Hosting を参考に、ツール => インターネット オプション => セキュリティ タブ => 全てのゾーンで 保護モードを有効にする チェックを統一する必要があります。
Java 版と比べると、若干メソッド数が少なかったりしますし、import static が無いので static メソッドの呼び出し*2が冗長な感じもしますが同じように動きますね!
*1:Windows Live にしました
*2:ExpectedConditions とか