selenium webdriver使ってみようず

20
SeleniumWebDriver 使使使使使使使 使使使 2012/02/20 使 使

Upload: oda-shinsuke

Post on 11-May-2015

4.039 views

Category:

Technology


0 download

DESCRIPTION

作りかけ

TRANSCRIPT

Page 1: Selenium webdriver使ってみようず

SeleniumWebDriver使ってみようず

鍋駆動 2012/02/20お だ

Page 2: Selenium webdriver使ってみようず

自己紹介

織田 信亮 ( おだ しんすけ )大阪で開発者しています

http://d.hatena.ne.jp/odashinsuke/Twitter:@shinsukeoda

Page 3: Selenium webdriver使ってみようず

Selenium WebDriver ってなに?

http://seleniumhq.org/docs/03_webdriver.html

Selenium が WebDriver と統合されたSelenium 1.0 だと JavaScript/HTML で記述がメインWebDriver は、 Selenium ではセキュリティで制限されていたものが回避出来るSelenium 2.0 で統合!

Page 4: Selenium webdriver使ってみようず

API が提供されている言語

JavaC#PythonRubyPHPPerl

Page 5: Selenium webdriver使ってみようず

提供されている WebDriver

HtmlUnit DriverFirefox DriverInternet Explorer DriverChrome DriverOpera DriveriPhone DriverAndroid Driver

Page 6: Selenium webdriver使ってみようず

みんな大好き IE Driver を使う

前準備IE がインストールされているツール => インターネット オプション => セキュリティ タブ => 全てのゾーンで「保護モードを有効にする」チェック値を統一

Page 7: Selenium webdriver使ってみようず

C# で

Visual Web Developer 2010 Express (VWD2010)拡張機能マネージャーから NuGet インストールPackage Manage Console(NuGet) から

Support は便利だからいれてます

Install-Package Selenium.WebDriverInstall-Package Selenium.Support

Page 8: Selenium webdriver使ってみようず

[Test]public void 検索 () { var driver = new InternetExplorerDriver(); try { driver.Navigate().GoToUrl("http://www.bing.com"); var txt 条件 = driver.FindElementByName("q"); txt 条件 .Clear(); txt 条件 .SendKeys("Microsoft"); var btn 検索 = driver.FindElementByXPath( "//input[@type='submit' and @name='go']"); btn 検索 .Click(); var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 10)); wait.Until(ExpectedConditions.TitleIs("Microsoft - Bing")); var lbl 件数 = driver.FindElementById("count"); Regex.Match(lbl 件数 .Text, "(?<=of ).*(?= results)").Value .Is("527,000,000"); } finally { driver.Quit(); }}

Page 9: Selenium webdriver使ってみようず

[TestFixture]public class PageObjectTest { [Test] public void 検索 () { var driver = new InternetExplorerDriver(); try { var instance = BingSearch.Create(driver); instance.Input 検索条件 ("Microsoft"); instance.Click 検索 (); instance.Get 検索結果件数 ().Is("527,000,000"); } finally { driver.Quit(); } }}

Page 10: Selenium webdriver使ってみようず

public class BingSearch { public static BingSearch Create(RemoteWebDriver driver) { var instance = new BingSearch(driver); driver.Url = "http://www.bing.com"; return instance; } private readonly RemoteWebDriver driver; private BingSearch(RemoteWebDriver driver) { this.driver = driver; } private IWebElement txt 条件 { get { return driver.FindElementByName("q"); } } private IWebElement btn 検索 { get { return driver.FindElementByXPath( "//input[@type='submit' and @name='go']"); } } private IWebElement lbl 件数 { get { return driver.FindElementById("count"); } }

Page 11: Selenium webdriver使ってみようず

public void Input 検索条件 (string 条件 ) { this.txt 条件 .Clear(); this.txt 条件 .SendKeys( 条件 ); } public void Click 検索 () { this.btn 検索 .Click(); var wait = new WebDriverWait(this.driver, new TimeSpan(0, 0, 10)); wait.Until(ExpectedConditions.TitleIs("Microsoft - Bing")); } public string Get 検索結果件数 () { return Regex.Match(this.lbl 件数 .Text, "(?<=of ).*(?= results)").Value; }}https://gist.github.com/1861739

Page 12: Selenium webdriver使ってみようず

Java (Maven) で

selenium-java

これいれると、 ie-driver や support もついてくる

<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.18.0</version></dependency>

Page 13: Selenium webdriver使ってみようず

@Testpublic void 検索 () { RemoteWebDriver driver = new InternetExplorerDriver(); try { driver.navigate().to("http://www.bing.com"); WebElement txt 条件 = driver.findElementByName("q"); txt 条件 .clear(); txt 条件 .sendKeys("Microsoft"); WebElement btn 検索 = driver.findElementByXPath( "//input[@type='submit' and @name='go']"); btn 検索 .click(); Wait<WebDriver> wait = new WebDriverWait(driver, 10); wait.until(titleIs("Microsoft - Bing")); WebElement lbl 件数 = driver.findElementById("count"); assertThat(lbl 件数 .getText() .replaceAll("(.*of )(.*)( results)", "$2"), is("527,000,000")); } finally { driver.quit(); }}

Page 14: Selenium webdriver使ってみようず

@Testpublic void 検索 () { RemoteWebDriver driver = new InternetExplorerDriver(); try { BingSearch instance = BingSearch.create(driver); instance.input 検索条件 ("Microsoft"); instance.click 検索 (); assertThat(instance.get 検索結果件数 (), is("527,000,000")); } finally { driver.quit(); }}

Page 15: Selenium webdriver使ってみようず

public class BingSearch { private final RemoteWebDriver driver; public static BingSearch create(RemoteWebDriver driver) { BingSearch instance = new BingSearch(driver); driver.navigate().to("http://www.bing.com"); return instance; } private BingSearch(RemoteWebDriver driver) { this.driver = driver; } private WebElement txt 条件 () { return driver.findElementByName("q"); } private WebElement btn 検索 () { return driver.findElementByXPath( "//input[@type='submit' and @name='go']"); } private WebElement lbl 件数 () { return driver.findElementById("count"); }

Page 16: Selenium webdriver使ってみようず

public void input 検索条件 (String 条件 ) { this.txt 条件 ().clear(); this.txt 条件 ().sendKeys( 条件 ); } public void click 検索 () { this.btn 検索 ().click(); Wait<WebDriver> wait = new WebDriverWait(driver, 10); wait.until(titleIs("Microsoft - Bing")); } public String get 検索結果件数 () { return this.lbl 件数 ().getText().replaceAll( "(.*of )(.*)( results)", "$2"); }}

https://gist.github.com/1861829

Page 17: Selenium webdriver使ってみようず

便利なやつ

Wait指定条件を満たすまで、 wait する ( タイムアウト指定 )

Selectinput type=“select” な WebElement のラッパー

PageFactoryPageObject の実装を少し楽にしてくれる

Page 18: Selenium webdriver使ってみようず

Wait

WebDriverWait が良く使われるExpectedConditions を使って条件指定Function を自前で実装も可WebDriver driver = null;Wait<WebDriver> wait = new WebDriverWait(driver, 10);wait.until(ExpectedConditions.titleIs(" タイトル "));wait.until(new Function<WebDriver, Boolean>() { public Boolean apply(WebDriver arg0) { try { return " タイトル ".equals(arg0.getTitle()); } catch (Throwable e) { return null; } }});

Page 19: Selenium webdriver使ってみようず

WebElement select = null;List<WebElement> options = select.findElements(By.tagName("option"));for (WebElement option : options) { option.click(); // 選択させる if (option.isSelected()) { // 選択していたら

}}Select wrapper = new Select(select);// 選択させるwrapper.selectByIndex(0);wrapper.selectByValue("hoge");wrapper.selectByVisibleText(" フヒヒ ");// 選択されているもの取得wrapper.getFirstSelectedOption();wrapper.getAllSelectedOptions();

Select

Page 20: Selenium webdriver使ってみようず

PageFactory

@ ベースで、要素とフィールドのマッピング