Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Selenium webdriver使ってみようず

4,856 views

Published on

作りかけ

Published in: Technology, Sports
  • Be the first to comment

  • Be the first to like this

Selenium webdriver使ってみようず

  1. 1. SeleniumWebDriver使ってみようず 鍋駆動 2012/02/20 お だ
  2. 2. 自己紹介織田 信亮(おだ しんすけ)大阪で開発者していますhttp://d.hatena.ne.jp/odashinsuke/Twitter:@shinsukeoda
  3. 3. Selenium WebDriver ってなに?http://seleniumhq.org/docs/03_webdriver.html Selenium が WebDriver と統合された Selenium 1.0 だと JavaScript/HTML で 記述がメイン WebDriver は、Selenium ではセキュリ ティで制限されていたものが回避出来る Selenium 2.0 で統合!
  4. 4. API が提供されている言語JavaC#PythonRubyPHPPerl
  5. 5. 提供されている WebDriver HtmlUnit Driver Firefox Driver Internet Explorer Driver Chrome Driver Opera Driver iPhone Driver Android Driver
  6. 6. みんな大好き IE Driver を使う 前準備 IE がインストールされている ツール => インターネット オプション => セキュリティ タブ => 全てのゾーンで「保 護モードを有効にする」チェック値を統一
  7. 7. C# で Visual Web Developer 2010 Express (VWD2010) 拡張機能マネージャーから NuGet インス トール Package Manage Console(NuGet) から Install-Package Selenium.WebDriver Install-Package Selenium.Support Support は便利だからいれてます
  8. 8. [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(); }}
  9. 9. [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(); } }}
  10. 10. 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"); } }
  11. 11. 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
  12. 12. Java (Maven) で selenium-java <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>2.18.0</version> </dependency> これいれると、ie-driver や support も ついてくる
  13. 13. @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(); }}
  14. 14. @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(); }}
  15. 15. 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"); }
  16. 16. 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
  17. 17. 便利なやつWait 指定条件を満たすまで、wait する(タイム アウト指定)Select input type=“select” な WebElement の ラッパーPageFactory PageObject の実装を少し楽にしてくれる
  18. 18. 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; } } });
  19. 19. SelectWebElement 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();
  20. 20. PageFactory @ ベースで、要素とフィールドのマッピ ング

×