Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Selenium入門(2023年版)

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for onozaty onozaty
September 15, 2023

 Selenium入門(2023年版)

Avatar for onozaty

onozaty

September 15, 2023
Tweet

More Decks by onozaty

Other Decks in Technology

Transcript

  1. Seleniumとは • Webブラウザの操作を自動化するためのフレームワーク • 主にWebアプリケーションのE2Eテストに利用 • ブラウザ操作をプログラムで行うことができる • テスト以外の自動化ツールでも利用 •

    単一のAPIで様々なブラウザを同じように操作可能 • 各ブラウザ×各OSの組み合わせで同じことを実行できる Seleniumの公式サイト https://www.selenium.dev/ ドキュメントの日本語訳 https://www.selenium.dev/documentation/ja/
  2. Seleniumの昔と今 - Selenium RC 初期(10年以上前)のSelenium 1は、Selenium RC(Remote Control)とい う仕組みを使っていた •

    プロキシのような形で、テスト対象のサイトにJavaScriptを埋め込 んで操作するような仕組み • ブラウザのセキュリティに起因する制約あり • アーキテクチャ的に複雑→安定しない要因に ※ Selenium Core、Selenium RCといったキーワードが出てきたら、昔の情報なので要注意
  3. Seleniumの昔と今 - Selenium WebDriver Selenium 2からWebDriverを使うように • WebDriverを使うことで、直接ブラウザを操作できるようになっ た •

    Selenium RCの時のようなセキュリティ制限を受けなくなった • シンプルな構成となった→安定するように • 現在ではW3Cで標準化されており、各ブラウザ毎にWebDriverの 実装が用意されている • 主にブラウザベンダが提供している
  4. 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)など、同じようなことをやってくれるラ イブラリもいくつかあったが、それも当然いらなくなる
  5. 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でのコード
  6. 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で書くと、下記のように簡潔になる
  7. Selenium IDE - 操作方法 • Selenium IDEを起動し、ブラウザ操作をレコーディング • Assertもブラウザ上で右クリックから追加することができる •

    for each や if文などの制御構文も書くことができる • コマンドとして直接入力することで複雑な動きも実現 • コマンド一覧 https://docs.seleniumhq.org/selenium-ide/docs/en/api/commands/ • 一連の操作を繰り返し実行できる • ファイル(*.side)としても保存できるので、再度開いて実行ということも可 能
  8. Selenium IDE - selenium-side-runner • 保存したファイル(*.side)は、selenium-side-runner というコマンド ラインツールでも実行可能 • Node.js

    で書かれたツールになっている • https://www.selenium.dev/selenium-ide/docs/en/introduction/command- line-runner
  9. Selenium IDE と WebDriver • Selenium IDEとSelenium WebDriverは全く異なる仕組みとなるが、 Selenium IDEの内容を、WebDriverでのコードとしてエクスポート

    することができる • 最初のうちは、IDEからエクスポートした コードを元にすると、WebDriverのコードが 書きやすいかも
  10. 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のスクリプト としてエクスポートできる
  11. Selenium以外のブラウザ自動化ツール • Cypress https://www.cypress.io/ • TestCafe https://testcafe.io/ • どっちもテストに特化したフレームワーク •

    オールインワン、準備が楽、学習コストが低い • プロキシやブラウザの拡張機能使って、ページ上でJavaScriptを実行するよ うな仕組み
  12. Selenium以外のブラウザ自動化ツール • Playwright https://playwright.dev/ • テスト用のフレームワーク • SeleniumやPuppeteerと同様にブラウザ自体を操作する • Puppeteer

    と似たAPI • GoogleにいてPuppeteer作った人が、MicrosoftにいってPlaywrightを作っている • ブラウザ操作のレコーディングによるコード生成機能 • Trace Viewer • テスト実行時の画面状態などをGUI上でトレースできる • Node.js(JavaScript/TypeScript)だけでなく、Java、Python、.NET(C#等) など にも対応