Seleniumコードの構成と実行
コンテンツヘルプ
このページはまだ不完全であり、追加または詳しく説明する必要がある事柄のプレースホルダーがあります。
ご協力いただける場合は、貢献ガイドラインをご確認ください。
1回限りのスクリプトを少数実行するだけではない場合は、コードを整理して作業できるようにする必要があります。このページでは、Seleniumコードを使用して実際に生産的なことを行う方法についてのアイデアを提供します。
一般的な用途
ほとんどの人は、Selenium を使用してウェブアプリケーションの自動テストを実行しますが、Selenium はブラウザ自動化のあらゆるユースケースをサポートしています。
反復作業
ウェブサイトにログインして何かをダウンロードしたり、フォームを送信する必要があるかもしれません。Selenium スクリプトを作成して、プリセットされた時間にサービスで実行できます。
ウェブスクレイピング
API がないサイトからデータを収集しようとしていますか?Selenium を使用するとこれが可能になりますが、一部のウェブサイトでは許可されておらず、Selenium をブロックすることさえあるため、ウェブサイトの利用規約を必ずよく理解してください。
テスト
テストのために Selenium を実行するには、Selenium によって実行されたアクションに対するアサーションを行う必要があります。したがって、優れたアサーションライブラリが必要です。テストの構造を提供する追加機能には、テストランナーの使用が必要です。
IDE
Selenium コードをどのように使用する場合でも、優れた統合開発環境がなければ、コードの作成や実行は非常に非効率になります。一般的なオプションをいくつかご紹介します...
テストランナー
Selenium をテストに使用していなくても、高度なユースケースがある場合は、テストランナーを使用してコードをより適切に整理することを検討する価値があるかもしれません。before/after フックを使用したり、グループまたは並行して実行したりできると非常に便利です。
選択
利用可能なテストランナーは多数あります。
このドキュメントのすべてのコード例は、テストランナーを使用し、すべてのコードが正しく更新されていることを保証するためにすべてのリリースで実行される、当社のサンプルディレクトリにあります(または移動中です)。以下は、リンク付きのテストランナーのリストです。最初の項目は、このリポジトリで使用されているものであり、このページのすべての例で使用されるものです。
インストール
これは、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);
セットアップとティアダウン
セットアップ
@BeforeEach
public void setup() {
driver = new ChromeDriver();
}
ティアダウン
@AfterEach
public void teardown() {
driver.quit();
}
セットアップ
def setup():
driver = webdriver.Chrome()
driver.get("https://selenium.dokyumento.jp/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
pytest path/to/test_script.py
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://selenium.dokyumento.jp/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://selenium.dokyumento.jp/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://selenium.dokyumento.jp/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://selenium.dokyumento.jp/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://selenium.dokyumento.jp/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 ドキュメントをお読みください。