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’ に追加します。:

主張

Stringtitle=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)

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

並べる

@BeforeEachpublicvoidsetup(){driver=newChromeDriver();}

取り壊す

@AfterEachpublicvoidteardown(){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スクリプトの各コンポーネントを見ました。こちらが、テストランナーを使用したそのコードの例です。

packagedev.selenium.getting_started;import staticorg.junit.jupiter.api.Assertions.assertEquals;importjava.time.Duration;importorg.junit.jupiter.api.AfterEach;importorg.junit.jupiter.api.BeforeEach;importorg.junit.jupiter.api.Test;importorg.openqa.selenium.By;importorg.openqa.selenium.WebDriver;importorg.openqa.selenium.WebElement;importorg.openqa.selenium.chrome.ChromeDriver;publicclass UsingSeleniumTest{WebDriverdriver;@BeforeEachpublicvoidsetup(){driver=newChromeDriver();}@TestpublicvoideightComponents(){driver.manage().timeouts().implicitlyWait(Duration.ofMillis(500));driver.get("https://www.selenium.dev/selenium/web/web-form.html");Stringtitle=driver.getTitle();assertEquals("Web form",title);WebElementtextBox=driver.findElement(By.name("my-text"));WebElementsubmitButton=driver.findElement(By.cssSelector("button"));textBox.sendKeys("Selenium");submitButton.click();WebElementmessage=driver.findElement(By.id("message"));Stringvalue=message.getText();assertEquals("Received!",value);}@AfterEachpublicvoidteardown(){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 ドキュメント.