Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Selenium入門(2023年版)
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
onozaty
September 15, 2023
Technology
240
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Selenium入門(2023年版)
onozaty
September 15, 2023
More Decks by onozaty
See All by onozaty
小さなアプリを作って公開するまで
onozaty
0
12
Dev Containers のススメ
onozaty
0
83
リモートワーク中に買って良かったものベスト3
onozaty
0
210
情報を表現するときのポイント
onozaty
0
44
チームで開発するための環境を整える
onozaty
1
380
40歳過ぎてもエンジニアでいるためにやっていること
onozaty
0
95
Java8から17へ
onozaty
0
37
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
0
320
Redmine issue assign notice plugin の紹介
onozaty
0
320
Other Decks in Technology
See All in Technology
「社外イベント=意識高い」の壁を壊せ!元々無関心だった僕らが部内で社外イベントを民主化して15人を連れ出すまで
say_no_w
0
150
クラウドサインを止めずに Nuxt へ 次の10年のために先に決めたこと
bengo4com
1
160
AI時代の開発はウォーターフォールに回帰する? / development-with-ai-back-to-wf
okamototakuyasr2
0
130
ひとりで始めた AI駆動開発、チームに広げて何が変わったのか
kenichiodo
0
110
データマネジメント × 法務で作りあげる、 freeeの新しいデータガバナンスへの軌跡
freee
PRO
2
470
AIをリアル世界に解き放つ 〜M5Stack×AIであなたのアイディアを手の平に〜
hamadakoji
1
560
Devin プロモコードの受け取りと適用(2026.10.27)
kinopeee
1
600
Vue で書く 空間コンピューティング、TresJS と WebXR を使ったXR デバイスのフロントエンド開発
hiranuma
0
110
国際カードブランドルール変更に伴うクレジットカード決済取引仕様変更について
k1style
0
240
DevelopersIO2026 -バックアップは“消されないこと”が9割-
yoshida0129
0
410
推論基盤と Scale-Up Interconnect の現状と制約から俯瞰する技術動向
markunet
2
430
シンプルな設定ファイルで実現する AWS IAM Identity Center の ユーザー管理Terraformフレームワークを公開しました / Simplifying AWS IAM Identity Center User Management: An Open-Source Terraform Framework
yamaguchitk333
1
320
Featured
See All Featured
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
530
New Earth Scene 8
popppiees
4
2.7k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
The Spectacular Lies of Maps
axbom
PRO
1
1.1k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
620
Intergalactic Javascript Robots from Outer Space
tanoku
273
28k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.4k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
Rails Girls Zürich Keynote
gr2m
96
14k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
940
How to build a perfect <img>
jonoalderson
1
6.2k
Transcript
Selenium入門 (2023年版) 2023-09-15 社内勉強会 onozaty
2021年2月12日に発表したものを元にアップデート https://speakerdeck.com/onozaty/seleniumru-men
Seleniumとは • Webブラウザの操作を自動化するためのフレームワーク • 主にWebアプリケーションのE2Eテストに利用 • ブラウザ操作をプログラムで行うことができる • テスト以外の自動化ツールでも利用 •
単一のAPIで様々なブラウザを同じように操作可能 • 各ブラウザ×各OSの組み合わせで同じことを実行できる Seleniumの公式サイト https://www.selenium.dev/ ドキュメントの日本語訳 https://www.selenium.dev/documentation/ja/
Seleniumの昔と今
Seleniumの昔と今 - Selenium RC 初期(10年以上前)のSelenium 1は、Selenium RC(Remote Control)とい う仕組みを使っていた •
プロキシのような形で、テスト対象のサイトにJavaScriptを埋め込 んで操作するような仕組み • ブラウザのセキュリティに起因する制約あり • アーキテクチャ的に複雑→安定しない要因に ※ Selenium Core、Selenium RCといったキーワードが出てきたら、昔の情報なので要注意
Seleniumの昔と今 - Selenium WebDriver Selenium 2からWebDriverを使うように • WebDriverを使うことで、直接ブラウザを操作できるようになっ た •
Selenium RCの時のようなセキュリティ制限を受けなくなった • シンプルな構成となった→安定するように • 現在ではW3Cで標準化されており、各ブラウザ毎にWebDriverの 実装が用意されている • 主にブラウザベンダが提供している
Seleniumを構成する要素 • Selenium WebDriver • Selenium IDE • Selenium Grid
Selenium WebDriver https://www.selenium.dev/ja/documentation/webdriver/
Selenium WebDriver • WebDriverを使うことで、ブラウザ操作をプログラムで行うことが できる 画像引用元: https://www.selenium.dev/ja/documentation/overview/components/ 各プログラミング言語(Java、Python、C#、Ruby、 JavaScriptなど)のバインディングが提供されている。 PHPのようにSelenium公式にはなくて、他から提供さ
れているものもあり。 各ブラウザ(Chrome、Firefox、Edgeなど) に対応したDriverが提供されている。 Web APIとして要求を受け付けて、 ブラウザを操作する。
Selenium WebDriver - 利用方法 昔は各種ブラウザに対応したDriverを入手し、それをパスとして指定 する必要があったが、Selenium 4.6(2022年11月リリース)でSelenium ManagerというツールがSelenium本体に同梱され、Selenium Manager が自動で対応するブラウザのDriverをダウンロードしてくれるように
なった。 • https://www.selenium.dev/ja/documentation/selenium_manager/ • 手動でのダウンロードが不要に • ブラウザのバージョンが上がる毎に、対応するDriverのバージョンもあ がって、動かなくなるということが以前は良く発生していた • WebDriverManager(Java)など、同じようなことをやってくれるラ イブラリもいくつかあったが、それも当然いらなくなる
Selenium WebDriver - 利用方法 WebDriver driver = new ChromeDriver(); //
サイトを開く driver.get("https://selenium.dev"); // id=search-byの要素を選択し、abcといった文字を入力 driver.findElement(By.id("search-by")).click(); driver.findElement(By.id("search-by")).sendKeys("abc"); // id=search-buttonの要素を探してclick driver.findElement(By.id("search-button")).click(); WebDriverのインスタンスを生成し、そのインスタンスを通して操作 ※今後出てくるコードは全てJavaでのコード
Selenium WebDriverでのデモ https://github.com/onozaty/selenium-sandbox/tree/main/selenium-junit
WebDriverを使いやすくしたもの • Selenium WebDriver自体は、テスト用というより、ブラウザ操作の ためのもの • コードが冗長になりがち • テストランナーやアサーションは別途用意する必要がある
WebDriverを使いやすくしたもの • WebDriverを内部で使いながら、テストを書きやすくするためのラ イブラリがいくつもある • Selenide https://selenide.org/ • Java •
WebdriverIO https://webdriver.io/ • Node.js
Selenide WebDriver driver = new ChromeDriver(); driver.get("http://192.168.33.10/"); driver.findElement(By.cssSelector("a[href=¥"/login¥"]")).click(); driver.findElement(By.id("username")).sendKeys("admin"); driver.findElement(By.id("password")).sendKeys("password");
driver.findElement(By.id("login-submit")).click(); assertThat(driver.findElement(By.cssSelector("h2")).getText()) .isEqualTo("title"); Configuration.browser = WebDriverRunner.CHROME; open("http://192.168.33.10/"); $("a[href=¥"/login¥"]").click(); $("#username").sendKeys("admin"); $("#password").sendKeys("password"); $("#login-submit").click(); $("h2").shouldHave(exactText("title")); 上記をSelenideで書くと、下記のように簡潔になる
Selenium IDE https://www.selenium.dev/selenium-ide/
Selenium IDE • Selenium IDEはブラウザ操作の記録、実行が行えるブラウザの拡張 機能 • ChromeとFirefox版がある
Selenium IDE • 昔のSelenium IDEはFirefox版のみで、FirefoxがXUL/XPCOMベースの 拡張機能を廃止したことで、一度死んだ • 今のものは、まったく新しいものとして作られたもの • 当初は旧IDEからかなり機能が落ちるものだったが、コマンドも揃ってきて、
今現在では十分使えるものとなった • コマンド一覧 https://docs.seleniumhq.org/selenium-ide/docs/en/api/commands/
Selenium IDE - 操作方法 • Selenium IDEを起動し、ブラウザ操作をレコーディング • Assertもブラウザ上で右クリックから追加することができる •
for each や if文などの制御構文も書くことができる • コマンドとして直接入力することで複雑な動きも実現 • コマンド一覧 https://docs.seleniumhq.org/selenium-ide/docs/en/api/commands/ • 一連の操作を繰り返し実行できる • ファイル(*.side)としても保存できるので、再度開いて実行ということも可 能
Selenium IDEでのデモ
Selenium IDE - selenium-side-runner • 保存したファイル(*.side)は、selenium-side-runner というコマンド ラインツールでも実行可能 • Node.js
で書かれたツールになっている • https://www.selenium.dev/selenium-ide/docs/en/introduction/command- line-runner
Selenium IDE と WebDriver • Selenium IDEとSelenium WebDriverは全く異なる仕組みとなるが、 Selenium IDEの内容を、WebDriverでのコードとしてエクスポート
することができる • 最初のうちは、IDEからエクスポートした コードを元にすると、WebDriverのコードが 書きやすいかも
Selenium Grid https://www.selenium.dev/documentation/ja/grid/
Selenium Grid • Selenium Gridを使うことで、複数のリモートマシン上でSeleniumを 実行することができる • 異なるブラウザ、異なるOS上でのテストを一元管理しながら、複数のリ モートマシン上で実行できる •
並列で実行することで、テストの時間短縮を行える
Selenium Grid 画像引用元: https://www.selenium.dev/documentation/ja/grid/grid_4/components_of_a_grid/
Selenium以外のもの
Selenium以外のブラウザ自動化ツール • Puppeteer https://github.com/puppeteer/puppeteer • ChromeのDevTools Protocolを使って操作するNode.jsのライブラリ • DevTools Protocolを使うので、SeleniumのWebDriverより高機能なことが
できるメリットが以前はあったが、Seleniumも最近DevTools Protocolを使 えるようになっている • https://www.selenium.dev/ja/documentation/webdriver/bidirectional/chrome_devtools/ • DevToolsのRecorderで操作をレコーディングして、Puppeteerのスクリプト としてエクスポートできる
Selenium以外のブラウザ自動化ツール • Cypress https://www.cypress.io/ • TestCafe https://testcafe.io/ • どっちもテストに特化したフレームワーク •
オールインワン、準備が楽、学習コストが低い • プロキシやブラウザの拡張機能使って、ページ上でJavaScriptを実行するよ うな仕組み
Selenium以外のブラウザ自動化ツール • Playwright https://playwright.dev/ • テスト用のフレームワーク • SeleniumやPuppeteerと同様にブラウザ自体を操作する • Puppeteer
と似たAPI • GoogleにいてPuppeteer作った人が、MicrosoftにいってPlaywrightを作っている • ブラウザ操作のレコーディングによるコード生成機能 • Trace Viewer • テスト実行時の画面状態などをGUI上でトレースできる • Node.js(JavaScript/TypeScript)だけでなく、Java、Python、.NET(C#等) など にも対応
おわり ご清聴ありがとうございました