SlideShare a Scribd company logo
Selenium 触ってみよう
ASP.NET初心者向け勉強会
2015/04/11 お だ
自己紹介
織田 信亮(おだ しんすけ)
大阪で開発者しています
SQLWorld 代表 (http://sqlworld.org)
http://odashinsuke.hatenablog.com/
Twitter:@shinsukeoda
Selenium ってなに?
Web アプリケーション用のテストツール
ブラウザを使って Web アプリケーションの動作確認等
を行う
ブラウザの操作を Selenium が行ってくれる
本日触るのは Selenium WebDriver
Selenium WebDriver ってなに?
http://seleniumhq.org/docs/03_webdriver.html
Selenium が WebDriver と統合された
Selenium 1.0 だと JavaScript/HTML で記述がメイン
WebDriver は、Selenium ではセキュリティで制限され
ていたものが回避出来る
Selenium 2.0 で統合!
API が提供されている言語
Java
C#
Python
Ruby
PHP
Perl
JavaScript
提供されている WebDriver
HtmlUnit Driver
Firefox Driver
Internet Explorer Driver
Chrome Driver
Opera Driver
iOS Driver
Android Driver
言語によっては、提供されていない Driver もある!
環境構築 (Visual Studio)
Visual Studio NuGet からインストール
Package Manage Console(NuGet) から
Support は便利だからいれてます
Install-Package Selenium.WebDriver
Install-Package Selenium.Support
install-package Selenium.IEDriver
今日のコードはこちら
https://github.com/OdaShinsuke/20150411_ASPNET
みんな大好き IE Driver を使う
全てのゾーンで「保護モードを有効にする」チェックの
値を統一
拡大は 100% にしておく
using System;
using OpenQA.Selenium.IE;
using OpenQA.Selenium;
class Program {
static void Main(string[] args) {
IWebDriver driver = new InternetExplorerDriver();
Console.ReadKey();
driver.Quit();
}
}
とりあえず、ブラウザ起動してみる
using System;
using OpenQA.Selenium.IE;
using OpenQA.Selenium;
class Program {
static void Main(string[] args) {
IWebDriver driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://www.bing.com");
Console.WriteLine(driver.Title);
Console.ReadKey();
driver.Quit();
}
}
Bing にいってみる
API の基本
ドライバー
IWebDriver (WebDriver)
エレメント
IWebElement (WebElement)
ロケーター
By
ドライバー の API
ページのタイトル取得
要素の検索
ISearchContext を実装
FindElement, FindElements
ページ遷移
INavigation を保持
GoToUrl, Back, Forward
コンテキストの切り替え
ITargetLocator を保持
Alert, Frame, Window
using System;
using OpenQA.Selenium.IE;
using OpenQA.Selenium;
class Program {
static void Main(string[] args) {
IWebDriver driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://www.bing.com");
IWebElement element = driver.FindElement(By.Name("q"));
element.SendKeys("セレニウム ウェブドライバー");
Console.ReadKey();
driver.Quit();
}
}
テキストボックスに文字を入力
Selenium 触ってみよう
ロケーターには何がある?
Id
Name
TagName
ClassName
CssSelector
LinkText
PartialLinkText
XPath
using System;
using OpenQA.Selenium.IE;
using OpenQA.Selenium;
class Program {
static void Main(string[] args) {
IWebDriver driver = new InternetExplorerDriver();
driver.Navigate().GoToUrl("http://www.bing.com");
IWebElement elementByName = driver.FindElement(By.Name("q"));
elementByName.SendKeys("セレニウム ウェブドライバー");
IWebElement elementById = driver.FindElement(By.Id("sb_form_q"));
elementById.SendKeys(" ID で取ったお");
IWebElement elementByCss = driver.FindElement(
By.CssSelector("b_searchbox"));
elementByCss.Clear();
elementByCss.SendKeys("CssSelector で");
Console.ReadKey();
driver.Quit();
}
}
色んな取り方をしてみる
エレメント の メソッド
SendKeys
Clear
Click
GetAttribute
input タグの入力値はこれで取得する
GetCssValue
Submit
要素の検索 (ISearchContext を実装)
エレメント の プロパティ
基本 get だけ
Displayed
Enabled
Location
Selected
チェックボックスや Select の Option
Size
TagName
Text
タグに挟まれたテキストのこと
テキストボックスの値じゃない!
class Program {
static void Main(string[] args) {
var driver = new InternetExplorerDriver();
try {
driver.Navigate().GoToUrl("http://www.bing.com");
var txt条件 = driver.FindElementByName("q");
txt条件.SendKeys("SQLWorld");
txt条件.Submit();
Thread.Sleep(3000); // 次の画面に遷移するまで待つ
var lbl件数 = driver.FindElementByClassName("sb_count");
Console.WriteLine(lbl件数.Text);
Console.ReadKey();
} finally {
driver.Quit();
}
}
}
検索してみる
便利なやつ
IWait(Wait)
Selenium.Support に含まれている
OpenQA.Selenium.Support.UI.IWait
Thread.Sleep はもう古い!
指定条件を満たすまで待機する
タイムアウト指定することで、異常時には例外で終了する
Wait
WebDriverWait が良く使われる
コンストラクタでタイムアウト時間指定
Until メソッドに Func を渡し条件指定
Func は、既定の実装が幾つかある
ExpectedConditions
Func を自前で実装も可
wait.Until(d => d.Title == "Microsoft - Bing");
IWait<IWebDriver> wait =
new WebDriverWait(driver, new TimeSpan(0, 0,10));
wait.Until(ExpectedConditions.TitleIs("Microsoft - Bing"));
class Program {
static void Main(string[] args) {
var driver = new InternetExplorerDriver();
try {
driver.Navigate().GoToUrl("http://www.bing.com");
var txt条件 = driver.FindElementByName("q");
txt条件.SendKeys("SQLWorld");
txt条件.Submit();
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 10));
wait.Until(ExpectedConditions.TitleIs("SQLWorld - Bing"));
var lbl件数 = driver.FindElementByClassName("sb_count");
Console.WriteLine(lbl件数.Text);
Console.ReadKey();
} finally {
driver.Quit();
}
}
}
Wait 使って検索してみる
スクリーンショット
ITakesScreenshot を実装している Driver が対象
殆どの Driver は実装している
driver.GetScreenshot().SaveAsFile(
@"c:workhoge.png", ImageFormat.Png);
class Program {
static void Main(string[] args) {
var driver = new InternetExplorerDriver();
try {
driver.Navigate().GoToUrl("http://sqlworld.org/event/20150425/");
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 10));
wait.Until(ExpectedConditions.TitleIs("SqlWorld :: SQLWorld★大阪#30"));
driver.GetScreenshot().SaveAsFile(
Environment.GetFolderPath(Environment.SpecialFolder.Desktop)
+ @"sqlworld.png",
ImageFormat.Png);
Console.ReadKey();
} finally {
driver.Quit();
}
}
}
スクリーンショット をとってみる
class Program {
static void Main(string[] args) {
var driver = new InternetExplorerDriver();
try {
driver.Navigate().GoToUrl("http://sqlworld.org/event/20150425/");
var wait = new WebDriverWait(driver, new TimeSpan(0, 0, 10));
wait.Until(ExpectedConditions.TitleIs("SqlWorld :: SQLWorld★大阪#30"));
driver.FindElementByName("name").SendKeys("あなたのお名前");
driver.FindElementByName("email").SendKeys("あなたのE-Mail");
driver.FindElementByName("commentText").SendKeys(@"宜しくお願いします!
懇親会:参加");
Console.ReadKey();
driver.FindElementByName("Post Comment").Submit();
Console.ReadKey();
} finally {
driver.Quit();
}
}
}
実践編!

More Related Content

PPTX
Selenium webdriver使ってみようず
PPTX
Selenium webdriver使ってみようず
PDF
JavaScriptでWebDriverのテストコードを書きましょ
PDF
PHP 2大 web フレームワークの徹底比較!
PPTX
Spring と TDD
PDF
大規模な負荷でもドキドキしない為のJava EE
PDF
Spring bootでweb 基本編
PDF
Spring bootでweb セキュリティ(ログイン認証)編
Selenium webdriver使ってみようず
Selenium webdriver使ってみようず
JavaScriptでWebDriverのテストコードを書きましょ
PHP 2大 web フレームワークの徹底比較!
Spring と TDD
大規模な負荷でもドキドキしない為のJava EE
Spring bootでweb 基本編
Spring bootでweb セキュリティ(ログイン認証)編

What's hot (20)

PDF
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
PDF
React.jsでクライアントサイドなWebアプリ入門
PDF
Spring bootでweb バリデート編
PDF
Introduction to Spock
PDF
Spring Fest 2018 Spring Bootで作るRESTful Web Service
PDF
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
PDF
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
PPTX
TDC20111031_Groovy_Geb
PDF
What makes Geb groovy?
PPTX
Azure で Serverless 初心者向けタッチ&トライ
PPTX
まだDOM操作で消耗してるの?
PDF
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
PPTX
はじめてのSpring Boot
PDF
Play!30分クッキング
PDF
Gradle a new Generation Build Tool
PDF
テストゼロからイチに進むための戦略と戦術
PDF
JMeter によるパフォーマンステスト指南
PPTX
CLRH_120414_WFTDD
PPTX
[JavaDo] JAX-RS ハンズオン 第2部
PDF
プロダクトに 1 から Vue.js を導入した話
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
React.jsでクライアントサイドなWebアプリ入門
Spring bootでweb バリデート編
Introduction to Spock
Spring Fest 2018 Spring Bootで作るRESTful Web Service
SpringOne 2GX 2014 参加報告 & Spring 4.1について #jsug
jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック
TDC20111031_Groovy_Geb
What makes Geb groovy?
Azure で Serverless 初心者向けタッチ&トライ
まだDOM操作で消耗してるの?
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
はじめてのSpring Boot
Play!30分クッキング
Gradle a new Generation Build Tool
テストゼロからイチに進むための戦略と戦術
JMeter によるパフォーマンステスト指南
CLRH_120414_WFTDD
[JavaDo] JAX-RS ハンズオン 第2部
プロダクトに 1 から Vue.js を導入した話
Ad

Similar to Selenium 触ってみよう (20)

PPTX
20120425
PDF
20120528 aws meister-reloaded-awssd-kforjava-public
PDF
G*workshop 2011/11/22 Geb+Betamax
PDF
jQuery と MVC で実践する標準志向 Web 開発
PDF
WebDriverで始めるUIスモークテスティング入門
PPT
Using Windows Azure
PDF
sveltekit-ja.pdf
PDF
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
PDF
AWS SDK for Haskell開発
PDF
densan2014-late01
PPTX
HTML5 on ASP.NET
PPTX
13016 n分で作るtype scriptでnodejs
PPTX
20111204 WebBroser Control Tips for Windows Phone
PPTX
~初心者がこれから Web アプリの開発をするために~
PPTX
T sql の parse と generator
PPT
Apexコアデベロッパーセミナー(Apexコード)071010
PPTX
Clrh 110716 wcfwf
PDF
Mvc conf session_5_isami
PDF
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
PDF
Webに今求められているレベル: HTML5 コントロールを利用した開発
20120425
20120528 aws meister-reloaded-awssd-kforjava-public
G*workshop 2011/11/22 Geb+Betamax
jQuery と MVC で実践する標準志向 Web 開発
WebDriverで始めるUIスモークテスティング入門
Using Windows Azure
sveltekit-ja.pdf
AWS Elastic Beanstalk(初心者向け 超速マスター編)JAWSUG大阪
AWS SDK for Haskell開発
densan2014-late01
HTML5 on ASP.NET
13016 n分で作るtype scriptでnodejs
20111204 WebBroser Control Tips for Windows Phone
~初心者がこれから Web アプリの開発をするために~
T sql の parse と generator
Apexコアデベロッパーセミナー(Apexコード)071010
Clrh 110716 wcfwf
Mvc conf session_5_isami
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Webに今求められているレベル: HTML5 コントロールを利用した開発
Ad

More from Oda Shinsuke (20)

PDF
SQL Server2022_PSPoptimization_pub.pdf
PDF
What's hyperscale
PDF
Dot net+sql server tips
PDF
Sql server 2019 ざっくり紹介
PDF
Spark on sql server?
PPTX
SQL Server のロック概要
PDF
Blazor 触ってみた
PDF
Linux + PHP でも SQL Server
PPTX
グラフデータベースの話し
PPTX
Sql server 2017 新機能のご紹介
PPTX
Sql server 2017 からはじめる graph データベース
PPTX
Transaction scopeまだダメ
PPTX
Sql serverと他dbの違いを押さえよう!
PPTX
2016年を振り返って
PPTX
Sql world とは
PPTX
開発者の方向けの Sql server(db) t sql 振り返り
PPTX
Sql world とは
PPTX
Ms build 触ってみよう
PPTX
Sql server2014復習とsqlserver2016の紹介
PPTX
Sql server sql database 最新機能紹介
SQL Server2022_PSPoptimization_pub.pdf
What's hyperscale
Dot net+sql server tips
Sql server 2019 ざっくり紹介
Spark on sql server?
SQL Server のロック概要
Blazor 触ってみた
Linux + PHP でも SQL Server
グラフデータベースの話し
Sql server 2017 新機能のご紹介
Sql server 2017 からはじめる graph データベース
Transaction scopeまだダメ
Sql serverと他dbの違いを押さえよう!
2016年を振り返って
Sql world とは
開発者の方向けの Sql server(db) t sql 振り返り
Sql world とは
Ms build 触ってみよう
Sql server2014復習とsqlserver2016の紹介
Sql server sql database 最新機能紹介

Selenium 触ってみよう