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 フックを使用して、グループまたは並行して物事を実行できると非常に便利です。
卜 さまざまなテストランナーが利用可能です。
このドキュメントのすべてのコード例は、
テストランナーを使用し、すべてのコードが正しく更新されていることを確認するためにリリースごとに実行されるディレクトリの例。
リンク付きのテストランナーのリストを次に示します。最初の項目は、このリポジトリで使用される項目と
このページのすべての例で使用されます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin 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ライブラリのインストール 。このコードは、私たちのドキュメント例プロジェクトで使用されているものの例を示しているだけです。
Java
Python
CSharp
Ruby
JavaScript
Kotlin プロジェクトで使用するには、requirements.txt ファイルに追加します:
プロジェクトの ‘csproj’ ファイルで、依存関係を ‘ItemGroup’ の ‘PackageReference’ として指定します:
プロジェクトの ‘package.json’ で、要件を ‘dependencies’ に追加します。:
主張
Java
Python
CSharp
Ruby
JavaScript
Kotlin
WebElement message = driver . findElement ( By . id ( "message" ));
examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java
Copy
Close
package dev.selenium.getting_started ;
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 ;
import java.time.Duration ;
import static org.junit.jupiter.api.Assertions.assertEquals ;
public class UsingSeleniumTest {
@Test
public void eightComponents () {
WebDriver driver = new ChromeDriver ();
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" );
String title = driver . getTitle ();
assertEquals ( "Web form" , title );
driver . manage (). timeouts (). implicitlyWait ( Duration . ofMillis ( 500 ));
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 );
driver . quit ();
}
}
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" )
examples/python/tests/getting_started/using_selenium_tests.py
Copy
Close
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_eight_components ():
driver = webdriver . Chrome ()
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" )
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!"
driver . quit ()
var title = driver . Title ;
Assert . AreEqual ( "Web form" , title );
examples/dotnet/SeleniumDocs/GettingStarted/UsingSeleniumTest.cs
Copy
Close
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 ();
}
}
}
driver . manage . timeouts . implicit_wait = 500
examples/ruby/spec/getting_started/using_selenium_spec.rb
Copy
Close
# frozen_string_literal: true
require 'spec_helper'
RSpec . describe 'Using Selenium' do
it 'uses eight components' do
driver = Selenium :: WebDriver . for :chrome
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!' )
driver . quit
end
end
let title = await driver . getTitle ();
assert . equal ( "Web form" , title );
examples/javascript/test/getting_started/runningTests.spec.js
Copy
Close
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 ());
});
val title = driver . title
assertEquals ( "Web form" , title )
examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt
Copy
Close
package dev.selenium.getting_started
import org.junit.jupiter.api.*
import org.junit.jupiter.api.Assertions.assertEquals
import org.openqa.selenium.By
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import java.time.Duration
@TestInstance ( TestInstance . Lifecycle . PER_CLASS )
class FirstScriptTest {
private lateinit var driver : WebDriver
@Test
fun eightComponents () {
driver = ChromeDriver ()
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" )
val title = driver . title
assertEquals ( "Web form" , title )
driver . manage (). timeouts (). implicitlyWait ( Duration . ofMillis ( 500 ))
var textBox = driver . findElement ( By . name ( "my-text" ))
val submitButton = driver . findElement ( By . cssSelector ( "button" ))
textBox . sendKeys ( "Selenium" )
submitButton . click ()
val message = driver . findElement ( By . id ( "message" ))
val value = message . getText ()
assertEquals ( "Received!" , value )
driver . quit ()
}
}
セットアップとティアダウン
Java
Python
CSharp
Ruby
JavaScript
Kotlin 並べる
String title = driver . getTitle ();
assertEquals ( "Web form" , title );
examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java
Copy
Close
package dev.selenium.getting_started ;
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 ;
import java.time.Duration ;
import static org.junit.jupiter.api.Assertions.assertEquals ;
public class UsingSeleniumTest {
@Test
public void eightComponents () {
WebDriver driver = new ChromeDriver ();
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" );
String title = driver . getTitle ();
assertEquals ( "Web form" , title );
driver . manage (). timeouts (). implicitlyWait ( Duration . ofMillis ( 500 ));
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 );
driver . quit ();
}
}
取り壊す examples/java/src/test/java/dev/selenium/getting_started/UsingSeleniumTest.java
Copy
Close
package dev.selenium.getting_started ;
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 ;
import java.time.Duration ;
import static org.junit.jupiter.api.Assertions.assertEquals ;
public class UsingSeleniumTest {
@Test
public void eightComponents () {
WebDriver driver = new ChromeDriver ();
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" );
String title = driver . getTitle ();
assertEquals ( "Web form" , title );
driver . manage (). timeouts (). implicitlyWait ( Duration . ofMillis ( 500 ));
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 );
driver . quit ();
}
}
並べる examples/python/tests/getting_started/using_selenium_tests.py
Copy
Close
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_eight_components ():
driver = webdriver . Chrome ()
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" )
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!"
driver . quit ()
取り壊す examples/python/tests/getting_started/using_selenium_tests.py
Copy
Close
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_eight_components ():
driver = webdriver . Chrome ()
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" )
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!"
driver . quit ()
並べる driver = Selenium :: WebDriver . for :chrome
driver . get ( 'https://www.selenium.dev/selenium/web/web-form.html' )
examples/ruby/spec/getting_started/using_selenium_spec.rb
Copy
Close
# frozen_string_literal: true
require 'spec_helper'
RSpec . describe 'Using Selenium' do
it 'uses eight components' do
driver = Selenium :: WebDriver . for :chrome
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!' )
driver . quit
end
end
取り壊す examples/ruby/spec/spec_helper.rb
Copy
Close
# frozen_string_literal: true
require 'selenium-webdriver'
require 'selenium/webdriver/support/guards'
RSpec . configure do | config |
# Enable flags like --only-failures and --next-failure
config . example_status_persistence_file_path = '.rspec_status'
# Disable RSpec exposing methods globally on `Module` and `main`
config . disable_monkey_patching!
config . expect_with :rspec do | c |
c . syntax = :expect
end
config . before do | example |
bug_tracker = 'https://gigithub.com/SeleniumHQ/seleniumhq.github.io/issues'
guards = Selenium :: WebDriver :: Support :: Guards . new ( example ,
bug_tracker : bug_tracker )
guards . add_condition ( :platform , Selenium :: WebDriver :: Platform . os )
guards . add_condition ( :ci , Selenium :: WebDriver :: Platform . ci )
results = guards . disposition
send ( * results ) if results
end
config . after { @driver &. quit }
def start_session
@driver = Selenium :: WebDriver . for :chrome
end
def start_firefox
options = Selenium :: WebDriver :: Options . firefox ( timeouts : { implicit : 1500 })
@driver = Selenium :: WebDriver . for :firefox , options : options
end
end
### 並べる
before ( async function () {
driver = await new Builder (). forBrowser ( 'chrome' ). build ();
});
examples/javascript/test/getting_started/runningTests.spec.js
Copy
Close
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 ());
});
### 取り壊す
after ( async () => await driver . quit ());
examples/javascript/test/getting_started/runningTests.spec.js
Copy
Close
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 ());
});
実行
Java
Python
CSharp
Ruby
JavaScript
Kotlin examples/python/README.md
Copy
Close
# Running all tests from Selenium python example
Follow these steps to run all test example from selenium python
1. Clone this repository
```
git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
```
2. Navigate to `python` directory
```
cd seleniumhq.github.io/examples/python
```
3. Install dependencies using pip
```
pip install -r requirements.txt
```
> if you are on a different python version, for example python3.x you may have to replace `pip` with `pip3`
4. Run all tests
```
pytest
```
> Please keep some patience - If you are doing it for the first time, it will take a little while to verify and download the browser drivers
## Execute a specific example
To run a specific Selenium Python example, use the following command:
```bash
python first_script.py
```
Make sure to replace `first_script.py` with the path and name of the example you want to run.
examples/ruby/README.md
Copy
Close
# Running all tests from Selenium ruby example
Follow these steps to run all test example from selenium ruby
1. Clone this repository
```
git clone https://github.com/SeleniumHQ/seleniumhq.github.io.git
```
2. Navigate to `ruby` directory
```
cd seleniumhq.github.io/examples/ruby
```
3. Install dependencies using bundler
```
bundler install
```
4. Run all all tests
```
bundle exec rspec
```
> Please keep some patience - If you are doing it for the first time, it will take a little while to verify and download the browser drivers
# Execute a ruby script
Use this command to run a ruby script and follow the first script example
```
ruby example_script.rb
```
Mocha mocha runningTests.spec.js
npx npx mocha runningTests.spec.js
例 最初のスクリプト のトピックでは、Seleniumスクリプトの各コンポーネントを見ました。こちらが、テストランナーを使用したそのコードの例です。
Java
Python
CSharp
Ruby
JavaScript
Kotlin package dev.selenium.getting_started ;
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 ;
import java.time.Duration ;
import static org.junit.jupiter.api.Assertions.assertEquals ;
public class UsingSeleniumTest {
@Test
public void eightComponents () {
WebDriver driver = new ChromeDriver ();
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" );
String title = driver . getTitle ();
assertEquals ( "Web form" , title );
driver . manage (). timeouts (). implicitlyWait ( Duration . ofMillis ( 500 ));
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 );
driver . quit ();
}
}
from selenium import webdriver
from selenium.webdriver.common.by import By
def test_eight_components ():
driver = webdriver . Chrome ()
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" )
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!"
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'
RSpec . describe 'Using Selenium' do
it 'uses eight components' do
driver = Selenium :: WebDriver . for :chrome
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!' )
driver . quit
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 ドキュメント .