Seleniumコードの整理と実行

IDEとテストランナーライブラリを使用したSelenium実行のスケーリング

一握り以上の 1 回限りのスクリプトを実行する場合は、コードを整理して操作できる必要があります。このページでは、Seleniumコードを使用して実際に生産的なことを行う方法についてのアイデアを提供します。

一般的な用途

ほとんどの人はSeleniumを使用してWebアプリケーションの自動テストを実行します。 しかし、Seleniumはブラウザ自動化のあらゆるユースケースをサポートします。

反復タスク

おそらく、Webサイトにログインして何かをダウンロードするか、フォームを送信する必要があります。 Selenium スクリプトを作成して、あらかじめ設定された時間にサービスと共に実行できます。

Webスクレイピング

APIがないサイトからデータを収集したいとお考えですか?セレン これを行うことができますが、Webサイトに精通していることを確認してください。 一部のWebサイトでは許可されておらず、他のWebサイトではSeleniumがブロックされることさえあります。

テスティング

テストのためにSeleniumを実行するには、Seleniumが実行したアクションに対してアサーションを行う必要があります。 したがって、優れたアサーションライブラリが必要です。テストの構造を提供する追加機能 使用する必要があります Test Runner.

IDEs

Seleniumコードの使用方法に関係なく、優れた統合開発環境がなければ、Seleniumコードの作成や実行はあまり効果的ではありません。一般的なオプションを次に示します…

Test Runner

テストにSeleniumを使用していない場合でも、高度なユースケースがある場合は、テストランナーを使用してコードをより適切に整理するのが理にかなっている場合があります。before/after フックを使用して、グループまたは並行して物事を実行できると非常に便利です。

さまざまなテストランナーが利用可能です。

このドキュメントのすべてのコード例は、 テストランナーを使用し、すべてのコードが正しく更新されていることを確認するためにリリースごとに実行されるディレクトリの例。 リンク付きのテストランナーのリストを次に示します。最初の項目は、このリポジトリで使用される項目と このページのすべての例で使用されます。

  • JUnit - JavaベースのSeleniumテストで広く使用されているテストフレームワーク。
  • TestNG - 並列テスト実行やパラメーター化されたテストなどの追加機能を提供します。
  • pytest - そのシンプルさと強力なプラグインのおかげで、多くの人に好まれる選択肢です。
  • unittest - Python の標準ライブラリテストフレームワーク。
  • NUnit - .NET の一般的な単体テスト フレームワーク。
  • MS Test - Microsoft 独自の単体テスト フレームワーク。
  • RSpec - RubyでSeleniumテストを実行するために最も広く使用されているテストライブラリ。
  • Minitest - Ruby標準ライブラリに付属する軽量なテストフレームワークです。
  • Jest - 主にReactのテストフレームワークとして知られていますが、Seleniumのテストにも使用できます。
  • Mocha - Seleniumテストを実行するための最も一般的なJSライブラリ。
  • Kotest - Kotlin専用に設計された、柔軟で包括的なテストフレームワークです。
  • JUnit5 - 標準的なJavaテストフレームワークであり、Kotlinと完全に互換性があります。

装着

これは、で必要とされたものと非常によく似ています Seleniumライブラリのインストール。このコードは、私たちのドキュメント例プロジェクトで使用されているものの例を示しているだけです。

Maven

Gradle

プロジェクトで使用するには、requirements.txt ファイルに追加します:

プロジェクトの ‘csproj’ ファイルで、依存関係を ‘ItemGroup’ の ‘PackageReference’ として指定します:

プロジェクトの gemfile に追加

プロジェクトの ‘package.json’ で、要件を ‘dependencies’ に追加します。:

主張

String title = driver.getTitle(); assertEquals("Web form", title);
 title = driver.title  assert title == "Web form"
 var title = driver.Title;  Assert.AreEqual("Web form", title);
 title = @driver.title  expect(title).to eq('Web form')
 let title = await driver.getTitle();  assert.equal("Web form", title);
 val title = driver.title  assertEquals("Web form", title)

セットアップとティアダウン

並べる

@BeforeEach public void setup() { driver = new ChromeDriver(); }

取り壊す

@AfterEach public void teardown() { driver.quit(); }

並べる

def setup():  driver = webdriver.Chrome()  driver.get("https://www.selenium.dev/selenium/web/web-form.html")  return driver

取り壊す

def teardown(driver):  driver.quit()

並べる

 before do  @driver = Selenium::WebDriver.for :chrome  end

取り壊す

 config.after { @driver&.quit }
### 並べる
 before(async function () {  driver = await new Builder().forBrowser('chrome').build();  });
### 取り壊す
 after(async () => await driver.quit());

実行

Maven

mvn clean test 

Gradle

gradle clean test 
```
bundle exec rspec

Mocha

mocha runningTests.spec.js 

npx

npx mocha runningTests.spec.js 

最初のスクリプトのトピックでは、Seleniumスクリプトの各コンポーネントを見ました。こちらが、テストランナーを使用したそのコードの例です。

package dev.selenium.getting_started;  import static org.junit.jupiter.api.Assertions.assertEquals;  import java.time.Duration;  import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver;  public class UsingSeleniumTest {  WebDriver driver;  @BeforeEach public void setup() { driver = new ChromeDriver(); }  @Test public void eightComponents() {  driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500)); driver.get("https://www.selenium.dev/selenium/web/web-form.html");  String title = driver.getTitle(); assertEquals("Web form", title);  WebElement textBox = driver.findElement(By.name("my-text")); WebElement submitButton = driver.findElement(By.cssSelector("button"));  textBox.sendKeys("Selenium"); submitButton.click();  WebElement message = driver.findElement(By.id("message")); String value = message.getText(); assertEquals("Received!", value);  }  @AfterEach public void teardown() { driver.quit(); }  } 
from selenium import webdriver from selenium.webdriver.common.by import By   def test_eight_components():  driver = setup()   title = driver.title  assert title == "Web form"   driver.implicitly_wait(0.5)   text_box = driver.find_element(by=By.NAME, value="my-text")  submit_button = driver.find_element(by=By.CSS_SELECTOR, value="button")   text_box.send_keys("Selenium")  submit_button.click()   message = driver.find_element(by=By.ID, value="message")  value = message.text  assert value == "Received!"   teardown(driver)  def setup():  driver = webdriver.Chrome()  driver.get("https://www.selenium.dev/selenium/web/web-form.html")  return driver  def teardown(driver):  driver.quit() 
using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using OpenQA.Selenium; using OpenQA.Selenium.Chrome;  namespace SeleniumDocs.GettingStarted {  [TestClass]  public class UsingSeleniumTest  {   [TestMethod]  public void EightComponents()  {  IWebDriver driver = new ChromeDriver();   driver.Navigate().GoToUrl("https://www.selenium.dev/selenium/web/web-form.html");   var title = driver.Title;  Assert.AreEqual("Web form", title);   driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromMilliseconds(500);   var textBox = driver.FindElement(By.Name("my-text"));  var submitButton = driver.FindElement(By.TagName("button"));   textBox.SendKeys("Selenium");  submitButton.Click();   var message = driver.FindElement(By.Id("message"));  var value = message.Text;  Assert.AreEqual("Received!", value);   driver.Quit();  }  } }
# frozen_string_literal: true  require 'spec_helper' require 'selenium-webdriver'  RSpec.describe 'Using Selenium' do  before do  @driver = Selenium::WebDriver.for :chrome  end   it 'uses eight components' do  @driver.get('https://www.selenium.dev/selenium/web/web-form.html')   title = @driver.title  expect(title).to eq('Web form')   @driver.manage.timeouts.implicit_wait = 500   text_box = @driver.find_element(name: 'my-text')  submit_button = @driver.find_element(tag_name: 'button')   text_box.send_keys('Selenium')  submit_button.click   message = @driver.find_element(id: 'message')  value = message.text  expect(value).to eq('Received!')  end end 
const {By, Builder} = require('selenium-webdriver'); const assert = require("assert");  describe('First script', function () {  let driver;   before(async function () {  driver = await new Builder().forBrowser('chrome').build();  });   it('First Selenium script with mocha', async function () {  await driver.get('https://www.selenium.dev/selenium/web/web-form.html');   let title = await driver.getTitle();  assert.equal("Web form", title);   await driver.manage().setTimeouts({implicit: 500});   let textBox = await driver.findElement(By.name('my-text'));  let submitButton = await driver.findElement(By.css('button'));   await textBox.sendKeys('Selenium');  await submitButton.click();   let message = await driver.findElement(By.id('message'));  let value = await message.getText();  assert.equal("Received!", value);  });   after(async () => await driver.quit()); });

次のステップ

学んだことを活かして、Seleniumコードを構築します!

必要な機能が他にも見つかったら、残りの機能をお読みください WebDriver ドキュメント.