WebDriver WebDriverはブラウザをネイティブに操作します。詳細については、こちらをご覧ください。
WebDriverは、ユーザーがローカルまたはSeleniumサーバーを使用するリモートマシンで行うように、ブラウザをネイティブに動かし、ブラウザの自動化に関して大きく前進します。
Selenium WebDriverは言語バインディングと個々のブラウザ制御コードの実装の両方を参照します。 これは通常、単に WebDriver と呼ばれます。
Selenium WebDriverは、W3C勧告 です。
1 - 入門 Seleniumを初めて使用する場合は、すぐに習得するのに役立つリソースがいくつかあります。
Seleniumは市場で主要なブラウザの全てを WebDriver を使うことでサポートしています。
WebDriverとはAPI群とプロトコルです。これらはウェブブラウザの動作をコントロールするための言語中立なインターフェイスを定義しています。
それぞれのブラウザは特定のWebDriverの実装を持っており、これらは driver と呼ばれます。
driverはブラウザに委譲する責務を持つコンポーネントであり、Seleniumとブラウザ間の通信を処理します。
この分離は、ブラウザベンダーに自分たちのブラウザでの実装の責任を持たせるための意図的な努力のひとつです。
Seleniumは可能な場合これらのサードパーティ製のdriverを使いますが、それが現実的でない場合のためにプロジェクトでメンテナンスしているdriverも提供しています。
Seleniumフレームワークはこれら全ての要素をユーザ向けのインターフェイスを通して結びつけます。このインターフェイスは異なるブラウザバックエンドを透過的に使えるようにし、クロスブラウザ・クロスプラットフォームの自動化を可能にします。
Seleniumのセットアップは、他の商用ツールのセットアップとはかなり異なります。
Seleniumコードの記述を開始する前に、次のことを行う必要があります
選択した言語、つまりブラウザーの言語バインディングライブラリをインストールします
使用したい、そのブラウザのドライバ。
以下のリンクをたどって、Selenium WebDriverを起動してください。
ローコード/録音および再生ツールから始めたい場合は、確認してください
Selenium IDE
物事がうまくいったら、テストをスケールアップしたい場合は、Selenium Grid .
1.1 - Seleniumライブラリのインストール お気に入りのプログラミング言語用にSeleniumライブラリを設定します。
最初にあなたの自動化プロジェクトにSeleniumのバインディングをインストールする必要があります。
インストールの方法は選択した言語によって異なります。
言語別の要件
Java
Python
CSharp
Ruby
JavaScript
Kotlin サポートされている最小のJavaバージョンを表示する ここ .
Java用のSeleniumライブラリのインストールは、ビルドツールを使用して行います。
Maven プロジェクトの ‘pom.xml’ ファイルで依存関係を指定します:
<dependency>
<groupId> org.seleniumhq.selenium</groupId>
<artifactId> selenium-java</artifactId>
<version> ${selenium.version}</version>
</dependency>
Gradle プロジェクトの ‘build.gradle’ ファイル内の依存関係を ’testImplementation’ として指定します:
testImplementation 'org.seleniumhq.selenium:selenium-java:4.27.0'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.11.3'
各 Selenium バージョンでサポートされている最小 Python バージョンについては、次の場所にあります サポートされている Python バージョン
オン PyPi 。
Seleniumをインストールするには、いくつかの方法があります。
Pip ダウンロード または、ダウンロードすることもできますPyPI ソースアーカイブ
(selenium-x.x.x.tar.gz) を使用してインストールします setup.py
プロジェクトで必要 プロジェクトで使用するには、requirements.txt ファイルに追加します:
Seleniumの各バージョンでサポートされているすべてのフレームワークのリスト
で利用可能ですNuget
Seleniumのインストールにはいくつかのオプションがあります。
パケットマネージャー Install-Package Selenium.WebDriver
.NET CLI dotnet add package Selenium.WebDriver
CSProj プロジェクトの csproj
ファイルで、ItemGroup
の PackageReference
として依存関係を指定します。:
<PackageReference Include= "Selenium.WebDriver" Version= "4.27.0" />
その他の考慮事項 その他、使用上の注意点 Visual Studio Code (vscode) そして C#
上記のセクションに従って、互換性のある .NET SDK をインストールします。
また、C# と NuGet の vscode 拡張機能 (Ctrl-Shift-X) もインストールします。に従ってください指示はこちら
C# を使用して “Hello World” コンソール プロジェクトを作成および実行します。
コマンドラインを使用してNUnitスタータープロジェクトを作成することもできます dotnet new NUnit
.
ファイルを確認してください %appdata%\NuGet\nuget.config
一部の開発者がいくつかの問題のために空になると報告したため、適切に構成されています。
もしnuget.config
が空であるか、正しく構成されていない場合、Selenium プロジェクトの .NET ビルドは失敗します。
次のセクションをファイルに追加しますnuget.config
空の場合:
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="nuget.org" value="https://www.nuget.org/api/v2/" />
</packageSources>
...
詳細については、nuget.config
ここをクリック .
カスタマイズする必要があるかもしれません nuget.config
あなたのニーズを満たすために。
さて、戻ってください vscode、プレス Ctrl-Shift-P、およびタイプ “NuGet Add Package"をクリックし、必要な Selenium パッケージ Selenium.WebDriver
.
Enter キーを押して、バージョンを選択します。
これで、C# と vscode に関連するドキュメントの例を使用できるようになりました。
特定の Selenium バージョンに対して最低限必要な Ruby のバージョンを確認できます
オン rubygems.org
Seleniumは2つの異なる方法でインストールできます。
手動でインストールする gem install selenium-webdriver
プロジェクトの gemfile に追加 gem 'selenium-devtools' , '= 0.131.0'
Seleniumの特定のバージョンに最低限必要なNodeのバージョンは、Node Support Policy
節 オン npmjs
Seleniumは通常、npmを使用してインストールされます。
ローカルにインストールする npm install selenium-webdriver
プロジェクトに加える プロジェクトの package.json
で、要件を dependencies
:
Kotlin の Java バインディングを使用します。
次のステップ 初めてのSeleniumスクリプトを作成する
1.2 - 最初のSeleniumスクリプトを書く Seleniumスクリプトを作成するための段階的な説明
Seleniumをインストール し、
すると、Seleniumコードを書く準備が整います。
8つの基本コンポーネント Seleniumが行うことはすべて、ブラウザコマンドを送信して、何かを実行したり、情報の要求を送信したりすることです。
Seleniumで行うことのほとんどは、次の基本的なコマンドの組み合わせです。
[GitHub で完全な例を表示] へのリンクをクリックして、コンテキスト内のコードを表示します。
1. ドライバーインスタンスでセッションを開始します セッションの開始の詳細については、次のドキュメントをお読みください driver sessions
Java
Python
CSharp
Ruby
JavaScript
Kotlin WebDriver driver = new ChromeDriver ();
driver = webdriver . Chrome ()
IWebDriver driver = new ChromeDriver ();
driver = Selenium :: WebDriver . for :chrome
driver = await new Builder (). forBrowser ( Browser . CHROME ). build ();
2. Take action on browser こちらの例では、ナビゲート してウェブページに移動しています。
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" );
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" )
driver . Navigate (). GoToUrl ( "https://www.selenium.dev/selenium/web/web-form.html" );
driver . get ( 'https://www.selenium.dev/selenium/web/web-form.html' )
await driver . get ( 'https://www.selenium.dev/selenium/web/web-form.html' );
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" )
ブラウザに関する 情報 として、ウィンドウハンドル、ブラウザのサイズ/位置、クッキー、アラートなど、さまざまな種類のデータをリクエストできます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin var title = driver . Title ;
let title = await driver . getTitle ();
4. 待機戦略の確立 コードをブラウザの現在の状態と同期させることは、最大の課題の 1 つです
Seleniumを使用して、それをうまく行うことは高度なトピックです。
基本的には、要素を見つける前に、その要素がページ上にあることを確認する必要があります
また、要素は、操作を試みる前に対話可能な状態にあります。
暗黙的な待機が最善の解決策になることはめったにありませんが、ここで示すのが最も簡単なので、
プレースホルダーとして使用します。
[待機戦略] についてさらに読む(https://www.selenium.dev/ja/documentation/webdriver/waits/).
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver . manage (). timeouts (). implicitlyWait ( Duration . ofMillis ( 500 ));
driver . implicitly_wait ( 0.5 )
driver . Manage (). Timeouts (). ImplicitWait = TimeSpan . FromMilliseconds ( 500 );
driver . manage . timeouts . implicit_wait = 500
await driver . manage (). setTimeouts ({ implicit : 500 });
driver . manage (). timeouts (). implicitlyWait ( Duration . ofMillis ( 500 ))
5. 要素を検索する ためのコマンドを送信します ほとんどのSeleniumセッションにおけるコマンドの大部分は要素に関連しており、要素を見つける ことなしにはそれと対話することができません。
Java
Python
CSharp
Ruby
JavaScript
Kotlin WebElement textBox = driver . findElement ( By . name ( "my-text" ));
WebElement submitButton = driver . findElement ( By . cssSelector ( "button" ));
text_box = driver . find_element ( by = By . NAME , value = "my-text" )
submit_button = driver . find_element ( by = By . CSS_SELECTOR , value = "button" )
var textBox = driver . FindElement ( By . Name ( "my-text" ));
var submitButton = driver . FindElement ( By . TagName ( "button" ));
text_box = driver . find_element ( name : 'my-text' )
submit_button = driver . find_element ( tag_name : 'button' )
let textBox = await driver . findElement ( By . name ( 'my-text' ));
let submitButton = await driver . findElement ( By . css ( 'button' ));
var textBox = driver . findElement ( By . name ( "my-text" ))
val submitButton = driver . findElement ( By . cssSelector ( "button" ))
6. 要素に対してアクションを実行する 要素に対して行う アクション はわずかしかありませんが、それらは頻繁に使用されます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin textBox . sendKeys ( "Selenium" );
submitButton . click ();
text_box . send_keys ( "Selenium" )
submit_button . click ()
textBox . SendKeys ( "Selenium" );
submitButton . Click ();
text_box . send_keys ( 'Selenium' )
submit_button . click
await textBox . sendKeys ( 'Selenium' );
await submitButton . click ();
textBox . sendKeys ( "Selenium" )
submitButton . click ()
7. 要素に関する情報をリクエストします 要素には リクエスト可能な情報 が多く保存されています。
Java
Python
CSharp
Ruby
JavaScript
Kotlin var value = message . Text ;
let value = await message . getText ();
val value = message . getText ()
8. セッションを終了します これにより、ドライバー プロセスが終了し、既定ではブラウザーも閉じます。このドライバー インスタンスにこれ以上コマンドを送信することはできません。
セッションの終了 を参照.
Java
Python
CSharp
Ruby
JavaScript
Kotlin Seleniumファイルの実行
Java
Python
CSharp
Ruby
JavaScript
Kotlin mvn exec:java -D"exec.mainClass"="dev.selenium.getting_started.FirstScript" -D"exec.classpathScope"=test
pytest path/to/test_script.py
node example_script.spec.js
次のステップ ほとんどのSeleniumユーザーは多くのセッションを実行し、重複を最小限に抑え、コードをより保守しやすくするために整理する必要があります。このコードをユースケースのコンテキストに配置する方法については、以下をお読みください Seleniumの使用 。
1.3 - 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ライブラリ。
装着 これは、で必要とされたものと非常によく似ています Seleniumライブラリのインストール 。このコードは、私たちのドキュメント例プロジェクトで使用されているものの例を示しているだけです。
Java
Python
CSharp
Ruby
JavaScript
Kotlin プロジェクトで使用するには、requirements.txt ファイルに追加します:
プロジェクトの ‘csproj’ ファイルで、依存関係を ‘ItemGroup’ の ‘PackageReference’ として指定します:
プロジェクトの ‘package.json’ で、要件を ‘dependencies’ に追加します。:
主張
Java
Python
CSharp
Ruby
JavaScript
Kotlin 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 );
セットアップとティアダウン
Java
Python
CSharp
Ruby
JavaScript
Kotlin 並べる @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 ());
実行
Java
Python
CSharp
Ruby
JavaScript
Kotlin pytest path/to/test_script.py
Mocha mocha runningTests.spec.js
npx npx mocha runningTests.spec.js
例 最初のスクリプト のトピックでは、Seleniumスクリプトの各コンポーネントを見ました。こちらが、テストランナーを使用したそのコードの例です。
Java
Python
CSharp
Ruby
JavaScript
Kotlin 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 ドキュメント .
2 - ドライバーセッション セッションの開始と停止は、ブラウザーを開いたり閉じたりするためのものです。
セッションの作成 新しいセッションの作成は、W3C コマンド New session に対応しています。
セッションは、新しいDriverクラスオブジェクトを初期化することによって自動的に作成されます。
各言語では、次のいずれかのクラス (または同等のもの) の引数を使用してセッションを作成することができます。
ローカルドライバー ローカルドライバーを起動するための主な一意の引数には、ローカルコンピューターで必要なドライバーサービスを起動するための情報が含まれます。
Service オブジェクトはローカルドライバーにのみ適用され、ブラウザーのドライバーに関する情報を提供します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin WebDriver driver = new ChromeDriver ( chromeOptions );
driver = webdriver . Chrome ( options = options )
driver = new ChromeDriver ( options );
driver = Selenium :: WebDriver . for :chrome , options : options
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options )
. setChromeService ( service )
. build ();
リモートドライバー リモートドライバーを起動するための主な一意の引数には、コードを実行する場所に関する情報を含みます。
詳細は、リモートドライバー をご覧ください。
セッションの終了 セッションの終了に対するW3Cコマンドは、セッションの削除 です。
重要: quit
メソッドは close
メソッドとは異なり、
セッションを終了するには常に quit
を使用することをお勧めします。
Java
Python
CSharp
Ruby
JavaScript
Kotlin 2.1 - ブラウザーオプション これらの機能はすべてのブラウザで共有されています。
Selenium 3 では、Capabilitiesは Desired Capabilities クラスを使用してセッションで定義していました。
Selenium 4 以降、ブラウザ オプション クラスを使用する必要があります。
リモート ドライバー セッションの場合、使用するブラウザーを決めるため、ブラウザーオプションインスタンスが必要です。
これらのオプションは、Capabilities の w3c仕様で説明しています。
各ブラウザには、w3c仕様で定義しているものに加えて定義可能な カスタム オプション があります。
browserName オプションクラスのインスタンスを使用すると、ブラウザ名はデフォルトで設定されます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
String name = chromeOptions . getBrowserName ();
options = webdriver . ChromeOptions ()
assert options . capabilities [ 'browserName' ] == 'chrome'
options = Selenium :: WebDriver :: Options . chrome
browserVersion この機能はオプションであり、リモート側で使用可能なブラウザのバージョンを設定するために使用されます。最近のSeleniumのバージョンでは、システムにバージョンが見つからない場合、Selenium Manager によって自動的にダウンロードされます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
String version = "latest" ;
chromeOptions . setBrowserVersion ( version );
options = webdriver . ChromeOptions ()
options . browser_version = 'stable'
assert options . capabilities [ 'browserVersion' ] == 'stable'
options . browser_version = 'latest'
pageLoadStrategy 3種類のページ読み込み戦略を利用できます。
ページ読み込み戦略は、次の表で説明しています。
戦略 準備完了状態 注釈 normal complete デフォルトで使用され、すべてのリソースをダウンロードするのを待ちます eager interactive DOM アクセスの準備は整っていますが、画像などの他のリソースはまだロード中の可能性があります none Any WebDriver をまったくブロックしません
ドキュメントの document.readyState
プロパティは、現在のドキュメントの読み込み状態を示します。
URL 経由で新しいページに移動する場合、デフォルトでは、WebDriver は、ドキュメントの準備完了状態が完了するまで、
ナビゲーション メソッド (driver.navigate().get() など) の完了を保留します。
これは必ずしもページの読み込みが完了したことを意味するわけではありません。
特に、Ready State が完了した後に JavaScript を使用してコンテンツを動的に読み込むシングル ページ アプリケーションのようなサイトの場合はそうです。
また、この動作は、要素のクリックまたはフォームの送信の結果であるナビゲーションには適用されないことに注意してください。
自動化にとって重要ではないアセット (画像、css、js など) をダウンロードした結果、ページの読み込みに時間がかかる場合は、
デフォルトのパラメーターである normal
を eager
または none
に変更して、セッションの読み込みを高速化できます。
この値はセッション全体に適用されるため、 待機戦略
が不安定さを最小限に抑えるのに十分であることを確認してください。
normal (デフォルト) WebDriver は load
イベント検知するまで待機します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NORMAL );
WebDriver driver = new ChromeDriver ( chromeOptions );
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'normal'
driver = webdriver . Chrome ( options = options )
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
namespace pageLoadStrategy {
class pageLoadStrategy {
public static void Main ( string [] args ) {
var chromeOptions = new ChromeOptions ();
chromeOptions . PageLoadStrategy = PageLoadStrategy . Normal ;
IWebDriver driver = new ChromeDriver ( chromeOptions );
try {
driver . Navigate (). GoToUrl ( "https://example.com" );
} finally {
driver . Quit ();
}
}
}
}
options = Selenium :: WebDriver :: Options . chrome
options . page_load_strategy = :normal
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options . setPageLoadStrategy ( 'normal' ))
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
await driver . quit ();
import org.openqa.selenium.PageLoadStrategy
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
fun main () {
val chromeOptions = ChromeOptions ()
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NORMAL )
val driver = ChromeDriver ( chromeOptions )
try {
driver . get ( "https://www.google.com" )
}
finally {
driver . quit ()
}
}
eager WebDriver は、DOMContentLoaded
イベントを検知するまで待機します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . EAGER );
WebDriver driver = new ChromeDriver ( chromeOptions );
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'eager'
driver = webdriver . Chrome ( options = options )
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
namespace pageLoadStrategy {
class pageLoadStrategy {
public static void Main ( string [] args ) {
var chromeOptions = new ChromeOptions ();
chromeOptions . PageLoadStrategy = PageLoadStrategy . Eager ;
IWebDriver driver = new ChromeDriver ( chromeOptions );
try {
driver . Navigate (). GoToUrl ( "https://example.com" );
} finally {
driver . Quit ();
}
}
}
}
options = Selenium :: WebDriver :: Options . chrome
options . page_load_strategy = :eager
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options . setPageLoadStrategy ( 'eager' ))
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
await driver . quit ();
import org.openqa.selenium.PageLoadStrategy
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
fun main () {
val chromeOptions = ChromeOptions ()
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . EAGER )
val driver = ChromeDriver ( chromeOptions )
try {
driver . get ( "https://www.google.com" )
}
finally {
driver . quit ()
}
}
none WebDriver は、最初のページがダウンロードされるまで待機します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE );
WebDriver driver = new ChromeDriver ( chromeOptions );
options = webdriver . ChromeOptions ()
options . page_load_strategy = 'none'
driver = webdriver . Chrome ( options = options )
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
namespace pageLoadStrategy {
class pageLoadStrategy {
public static void Main ( string [] args ) {
var chromeOptions = new ChromeOptions ();
chromeOptions . PageLoadStrategy = PageLoadStrategy . None ;
IWebDriver driver = new ChromeDriver ( chromeOptions );
try {
driver . Navigate (). GoToUrl ( "https://example.com" );
} finally {
driver . Quit ();
}
}
}
}
options = Selenium :: WebDriver :: Options . chrome
options . page_load_strategy = :none
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options . setPageLoadStrategy ( 'none' ))
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
await driver . quit ();
import org.openqa.selenium.PageLoadStrategy
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
fun main () {
val chromeOptions = ChromeOptions ()
chromeOptions . setPageLoadStrategy ( PageLoadStrategy . NONE )
val driver = ChromeDriver ( chromeOptions )
try {
driver . get ( "https://www.google.com" )
}
finally {
driver . quit ()
}
}
これにより、リモートエンドのオペレーティングシステムが識別され、 platformName
を取得するとOS名が返されます。
クラウドベースのプロバイダーでは、 platformName
を設定すると、リモートエンドのOSが設定されます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
String platform = "OS X 10.6" ;
chromeOptions . setPlatformName ( platform );
options = webdriver . ChromeOptions ()
options . platform_name = 'any'
driver = webdriver . Chrome ( options = options )
options = Selenium :: WebDriver :: Options . firefox
options . platform_name = 'Windows 10'
acceptInsecureCerts この機能は、セッション中のナビゲーション中に、期限切れ(または)無効な TLS証明書
が使用されているかどうかを確認します。
機能が false
に設定されている場合、ナビゲーションでドメイン証明書の問題が発生すると、
insecure certificate error が返されます。
true
に設定すると、無効な証明書はブラウザーによって信頼されます。
すべての自己署名証明書は、デフォルトでこの機能によって信頼されます。
一度設定すると、 acceptInsecureCerts
Capabilityはセッション全体に影響します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
chromeOptions . setAcceptInsecureCerts ( true );
options = webdriver . ChromeOptions ()
options . accept_insecure_certs = True
driver = webdriver . Chrome ( options = options )
options = Selenium :: WebDriver :: Options . chrome
options . accept_insecure_certs = true
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options . setAcceptInsecureCerts ( true ))
. build ();
timeouts WebDriverの セッション
には特定の セッションタイムアウト
間隔が設定されており、
その間、ユーザーはスクリプトの実行またはブラウザーからの情報の取得の動作を制御できます。
各セッションタイムアウトは、以下で説明するように、異なる タイムアウト
の組み合わせで構成されます。
Script Timeout: 現在のブラウジングコンテキストで実行中のスクリプトをいつ中断するかを指定します。
新しいセッションがWebDriverによって作成されると、デフォルトのタイムアウト 30,000 が課されます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
Duration duration = Duration . of ( 5 , ChronoUnit . SECONDS );
chromeOptions . setScriptTimeout ( duration );
options = webdriver . ChromeOptions ()
options . timeouts = { 'script' : 5000 }
driver = webdriver . Chrome ( options = options )
options = Selenium :: WebDriver :: Options . chrome
options . timeouts = { script : 40_000 }
Page Load Timeout: 現在のブラウジングコンテキストでWebページをロードする必要がある時間間隔を指定します。
新しいセッションがWebDriverによって作成されると、デフォルトのタイムアウト 300,000 が課されます。
ページの読み込みが指定/デフォルトの時間枠を制限する場合、スクリプトは TimeoutException によって停止されます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
Duration duration = Duration . of ( 5 , ChronoUnit . SECONDS );
chromeOptions . setPageLoadTimeout ( duration );
options = webdriver . ChromeOptions ()
options . timeouts = { 'pageLoad' : 5000 }
driver = webdriver . Chrome ( options = options )
options = Selenium :: WebDriver :: Options . chrome
options . timeouts = { page_load : 400_000 }
Implicit Wait Timeout これは、要素を検索するときに暗黙的な要素の検索戦略を待つ時間を指定します。
新しいセッションがWebDriverによって作成されると、デフォルトのタイムアウト 0 が課されます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
Duration duration = Duration . of ( 5 , ChronoUnit . SECONDS );
chromeOptions . setImplicitWaitTimeout ( duration );
options = webdriver . ChromeOptions ()
options . timeouts = { 'implicit' : 5000 }
driver = webdriver . Chrome ( options = options )
options = Selenium :: WebDriver :: Options . chrome
options . timeouts = { implicit : 1 }
unhandledPromptBehavior 現在のセッションの ユーザープロンプトハンドラー
の状態を指定します。
デフォルトでは、 dismiss and notify (却下して通知する) 状態 となります。
User Prompt Handler これは、リモートエンドでユーザープロンプトが表示されたときに実行する必要があるアクションを定義します。
これは、 unhandledPromptBehavior
Capabilityによって定義され、次の状態があります。
dismiss (却下) accept (受入) dismiss and notify (却下して通知) accept and notify (受け入れて通知) ignore (無視)
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
chromeOptions . setUnhandledPromptBehaviour ( UnexpectedAlertBehaviour . DISMISS_AND_NOTIFY );
options = webdriver . ChromeOptions ()
options . unhandled_prompt_behavior = 'accept'
driver = webdriver . Chrome ( options = options )
options = Selenium :: WebDriver :: Options . chrome
options . unhandled_prompt_behavior = :accept
setWindowRect リモート エンドがすべての サイズ変更および再配置
コマンド をサポートするかどうかを示します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
chromeOptions . setCapability ( CapabilityType . SET_WINDOW_RECT , true );
options = webdriver . FirefoxOptions ()
options . set_window_rect = True # Full support in Firefox
driver = webdriver . Firefox ( options = options )
options = Selenium :: WebDriver :: Options . firefox
options . set_window_rect = true
strictFileInteractability この新しいcapabilityは、厳密な相互作用チェックを input type = file 要素に適用する必要があるかどうかを示します。
厳密な相互作用チェックはデフォルトでオフになっているため、隠しファイルのアップロードコントロールで Element Send Keys
を使用する場合の動作が変更されます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
chromeOptions . setCapability ( CapabilityType . STRICT_FILE_INTERACTABILITY , true );
options = webdriver . ChromeOptions ()
options . strict_file_interactability = True
driver = webdriver . Chrome ( options = options )
options = Selenium :: WebDriver :: Options . chrome
options . strict_file_interactability = true
proxy プロキシサーバーは、クライアントとサーバー間の要求の仲介役として機能します。
簡単に言えば、トラフィックはプロキシサーバーを経由して、要求したアドレスに戻り、戻ってきます。
Seleniumを使用した自動化スクリプト用のプロキシサーバーは、
ネットワークトラフィックをキャプチャする ウェブサイトによって行われた模擬バックエンドを呼び出す 複雑なネットワークトポロジーまたは厳格な企業の制限/ポリシーの下で、必要なWebサイトにアクセスします。 企業環境でブラウザがURLへの接続に失敗した場合、環境にアクセスするにはプロキシが必要であることが原因であることが最も可能性が高いです。
Selenium WebDriverは設定をプロキシする方法を提供します。
Move Code
Java
Python
CSharp
Ruby
JavaScript
Kotlin import org.openqa.selenium.Proxy ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeDriver ;
import org.openqa.selenium.chrome.ChromeOptions ;
public class ProxyTest {
public static void main ( String [] args ) {
Proxy proxy = new Proxy ();
proxy . setHttpProxy ( "<HOST:PORT>" );
ChromeOptions options = new ChromeOptions ();
options . setCapability ( "proxy" , proxy );
WebDriver driver = new ChromeDriver ( options );
driver . get ( "https://www.google.com/" );
driver . manage (). window (). maximize ();
driver . quit ();
}
}
options = webdriver . ChromeOptions ()
options . proxy = Proxy ({ 'proxyType' : ProxyType . MANUAL , 'httpProxy' : 'http.proxy:1234' })
driver = webdriver . Chrome ( options = options )
using OpenQA.Selenium ;
using OpenQA.Selenium.Chrome ;
public class ProxyTest {
public static void Main () {
ChromeOptions options = new ChromeOptions ();
Proxy proxy = new Proxy ();
proxy . Kind = ProxyKind . Manual ;
proxy . IsAutoDetect = false ;
proxy . SslProxy = "<HOST:PORT>" ;
options . Proxy = proxy ;
options . AddArgument ( "ignore-certificate-errors" );
IWebDriver driver = new ChromeDriver ( options );
driver . Navigate (). GoToUrl ( "https://www.selenium.dev/" );
}
}
options = Selenium :: WebDriver :: Options . chrome
options . proxy = Selenium :: WebDriver :: Proxy . new ( http : 'myproxy.com:8080' )
let webdriver = require ( 'selenium-webdriver' );
let chrome = require ( 'selenium-webdriver/chrome' );
let proxy = require ( 'selenium-webdriver/proxy' );
let opts = new chrome . Options ();
( async function example () {
opts . setProxy ( proxy . manual ({ http : '<HOST:PORT>' }));
let driver = new webdriver . Builder ()
. forBrowser ( 'chrome' )
. setChromeOptions ( opts )
. build ();
try {
await driver . get ( "https://selenium.dev" );
}
finally {
await driver . quit ();
}
}());
import org.openqa.selenium.Proxy
import org.openqa.selenium.WebDriver
import org.openqa.selenium.chrome.ChromeDriver
import org.openqa.selenium.chrome.ChromeOptions
class proxyTest {
fun main () {
val proxy = Proxy ()
proxy . setHttpProxy ( "<HOST:PORT>" )
val options = ChromeOptions ()
options . setCapability ( "proxy" , proxy )
val driver : WebDriver = ChromeDriver ( options )
driver [ "https://www.google.com/" ]
driver . manage (). window (). maximize ()
driver . quit ()
}
}
2.2 - HTTPクライアントの設定 これにより、HTTPライブラリのさまざまなパラメーターを設定できます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin package dev.selenium.drivers ;
import dev.selenium.BaseTest ;
import org.openqa.selenium.remote.http.ClientConfig ;
import org.junit.jupiter.api.BeforeEach ;
import org.junit.jupiter.api.Test ;
import org.openqa.selenium.chrome.ChromeOptions ;
import org.openqa.selenium.remote.RemoteWebDriver ;
import javax.net.ssl.SSLContext ;
import javax.net.ssl.TrustManager ;
import javax.net.ssl.TrustManagerFactory ;
import javax.net.ssl.X509TrustManager ;
import java.io.FileInputStream ;
import java.net.URL ;
import java.nio.file.Path ;
import java.security.KeyStore ;
import java.security.cert.CertificateFactory ;
import java.security.cert.X509Certificate ;
import java.time.Duration ;
import org.openqa.selenium.UsernameAndPassword ;
import static java.net.http.HttpClient.Version.HTTP_1_1 ;
public class HttpClientTest extends BaseTest {
URL gridUrl ;
@BeforeEach
public void startGrid () {
gridUrl = startStandaloneGridAdvanced ();
}
@Test
public void remoteWebDriverWithClientConfig () throws Exception {
ClientConfig clientConfig = ClientConfig . defaultConfig ()
. withRetries ()
. sslContext ( createSSLContextWithCA ( Path . of ( "src/test/resources/tls.crt" ). toAbsolutePath (). toString ()))
. connectionTimeout ( Duration . ofSeconds ( 300 ))
. readTimeout ( Duration . ofSeconds ( 3600 ))
. authenticateAs ( new UsernameAndPassword ( "admin" , "myStrongPassword" ))
. version ( HTTP_1_1 . toString ());
ChromeOptions options = new ChromeOptions ();
options . setEnableDownloads ( true );
driver = RemoteWebDriver . builder ()
. oneOf ( options )
. address ( gridUrl )
. config ( clientConfig )
. build ();
driver . quit ();
}
@Test
public void remoteWebDriverIgnoreSSL () throws Exception {
ClientConfig clientConfig = ClientConfig . defaultConfig ()
. withRetries ()
. sslContext ( createIgnoreSSLContext ())
. connectionTimeout ( Duration . ofSeconds ( 300 ))
. readTimeout ( Duration . ofSeconds ( 3600 ))
. authenticateAs ( new UsernameAndPassword ( "admin" , "myStrongPassword" ))
. version ( HTTP_1_1 . toString ());
ChromeOptions options = new ChromeOptions ();
options . setEnableDownloads ( true );
driver = RemoteWebDriver . builder ()
. oneOf ( options )
. address ( gridUrl )
. config ( clientConfig )
. build ();
driver . quit ();
}
public static SSLContext createSSLContextWithCA ( String caCertPath ) throws Exception {
FileInputStream fis = new FileInputStream ( caCertPath );
CertificateFactory cf = CertificateFactory . getInstance ( "X.509" );
X509Certificate caCert = ( X509Certificate ) cf . generateCertificate ( fis );
KeyStore keyStore = KeyStore . getInstance ( KeyStore . getDefaultType ());
keyStore . load ( null , null );
keyStore . setCertificateEntry ( "caCert" , caCert );
TrustManagerFactory tmf = TrustManagerFactory . getInstance ( TrustManagerFactory . getDefaultAlgorithm ());
tmf . init ( keyStore );
SSLContext sslContext = SSLContext . getInstance ( "TLS" );
sslContext . init ( null , tmf . getTrustManagers (), null );
return sslContext ;
}
public static SSLContext createIgnoreSSLContext () throws Exception {
TrustManager [] trustAllCerts = new TrustManager [] {
new X509TrustManager () {
public X509Certificate [] getAcceptedIssuers () {
return null ;
}
public void checkClientTrusted ( X509Certificate [] certs , String authType ) {
}
public void checkServerTrusted ( X509Certificate [] certs , String authType ) {
}
}
};
SSLContext sslContext = SSLContext . getInstance ( "TLS" );
sslContext . init ( null , trustAllCerts , new java . security . SecureRandom ());
return sslContext ;
}
}
import os
import pytest
import sys
from urllib3.util import Retry , Timeout
from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy
from selenium.webdriver.common.proxy import ProxyType
from selenium.webdriver.remote.client_config import ClientConfig
@pytest.mark.skipif ( sys . platform == "win32" , reason = "Gets stuck on Windows, passes locally" )
def test_start_remote_with_client_config ( grid_server ):
proxy = Proxy ({ "proxyType" : ProxyType . AUTODETECT })
retries = Retry ( connect = 2 , read = 2 , redirect = 2 )
timeout = Timeout ( connect = 300 , read = 3600 )
client_config = ClientConfig ( remote_server_addr = grid_server ,
proxy = proxy ,
init_args_for_pool_manager = {
"init_args_for_pool_manager" : { "retries" : retries , "timeout" : timeout }},
ca_certs = _get_resource_path ( "tls.crt" ),
username = "admin" , password = "myStrongPassword" )
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = grid_server , options = options , client_config = client_config )
driver . get ( "https://www.selenium.dev" )
driver . quit ()
@pytest.mark.skipif ( sys . platform == "win32" , reason = "Gets stuck on Windows, passes locally" )
def test_start_remote_ignore_certs ( grid_server ):
proxy = Proxy ({ "proxyType" : ProxyType . AUTODETECT })
client_config = ClientConfig ( remote_server_addr = grid_server ,
proxy = proxy ,
timeout = 3600 ,
ignore_certificates = True ,
username = "admin" , password = "myStrongPassword" )
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = grid_server , options = options , client_config = client_config )
driver . get ( "https://www.selenium.dev" )
driver . quit ()
def _get_resource_path ( file_name : str ):
if os . path . abspath ( "" ) . endswith ( "tests" ):
path = os . path . abspath ( f "resources/ { file_name } " )
else :
path = os . path . abspath ( f "tests/resources/ { file_name } " )
return path
client = Selenium :: WebDriver :: Remote :: Http :: Default . new ( open_timeout : 30 , read_timeout : 30 )
expect ( client . open_timeout ) . to eq 30
2.3 - ドライバーサービスクラス サービスクラスは、ドライバーの起動と停止を管理するためのものです。リモートWebDriverセッションでは使用できません。
サービスクラスを使用すると、ドライバーに関する情報(場所や使用するポートなど)を指定できます。また、コマンドラインに渡される引数を指定することもできます。便利な引数のほとんどは、ログに関連しています。
デフォルトサービスインスタンス デフォルトサービスインスタンスを使用してドライバーを起動するには:
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeDriverService service = new ChromeDriverService . Builder (). build ();
driver = new ChromeDriver ( service );
Selenium v4.11
service = webdriver . ChromeService ()
driver = webdriver . Chrome ( service = service )
var service = ChromeDriverService . CreateDefaultService ();
driver = new ChromeDriver ( service );
service = Selenium :: WebDriver :: Service . chrome
@driver = Selenium :: WebDriver . for :chrome , service : service
ドライバーの場所 注意: Selenium 4.6以上を使用している場合、ドライバーの場所を設定する必要はありません。Seleniumを更新できない場合や、特別な使用ケースがある場合は、ドライバーの場所を指定する方法は次のとおりです:
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeDriverService service =
new ChromeDriverService . Builder (). usingDriverExecutable ( driverPath ). build ();
Selenium v4.11
service = webdriver . ChromeService ( executable_path = chromedriver_bin )
Selenium v4.9
var service = ChromeDriverService . CreateDefaultService ( GetDriverLocation ( options ));
Selenium v4.8
service . executable_path = driver_path
ドライバーのポート ドライバーを特定のポートで実行したい場合は、次のように指定できます:
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeDriverService service = new ChromeDriverService . Builder (). usingPort ( 1234 ). build ();
Selenium v4.11
service = webdriver . ChromeService ( port = 1234 )
ログ記録 ログ記録機能はブラウザによって異なります。ほとんどのブラウザでは、ログの場所とレベルを指定できます。各ブラウザのページを確認してください:
2.4 - リモートWebDriver Seleniumは、リモートコンピュータ上でブラウザを自動化することができます。これには、リモートコンピュータ上で Selenium Grid が実行されている必要があります。コードを実行するコンピュータはクライアントコンピュータと呼ばれ、ブラウザとドライバーがあるコンピュータはリモートコンピュータまたは時々エンドノードと呼ばれます。Seleniumテストをリモートコンピュータに向けるには、Remote WebDriverクラスを使用し、そのマシンのグリッドのポートを含むURLを渡す必要があります。グリッドの設定方法については、グリッドのドキュメントを参照してください。
基本的な例 ドライバーは、コマンドを送信する場所と、リモートコンピュータ上で開始するブラウザを知る必要があります。そのため、アドレスとオプションインスタンスの両方が必要です。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions options = new ChromeOptions ();
driver = new RemoteWebDriver ( gridUrl , options );
options = webdriver . ChromeOptions ()
driver = webdriver . Remote ( command_executor = server , options = options )
var options = new ChromeOptions ();
driver = new RemoteWebDriver ( GridUrl , options );
options = Selenium :: WebDriver :: Options . chrome
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
アップロード ファイルのアップロード は、リモートWebDriverセッションではより複雑です。アップロードしたいファイルはコードを実行しているコンピュータ上にあることが多いですが、リモートコンピュータ上のドライバーはそのローカルファイルシステム上で指定されたパスを探しています。この解決策として、ローカルファイルディテクターを使用します。これを設定すると、Seleniumはファイルをパッケージ化し、リモートマシンに送信するため、ドライバーはその参照を認識できるようになります。一部のバインディングでは、デフォルトで基本的なローカルファイルディテクターが含まれており、すべてのバインディングでカスタムファイルディテクターを設定できます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin Javaにはデフォルトでローカルファイルディテクターが含まれていないため、アップロードを行う際には必ず追加する必要があります。
(( RemoteWebDriver ) driver ). setFileDetector ( new LocalFileDetector ());
WebElement fileInput = driver . findElement ( By . cssSelector ( "input[type=file]" ));
fileInput . sendKeys ( uploadFile . getAbsolutePath ());
driver . findElement ( By . id ( "file-submit" )). click ();
Pythonでは、リモートWebDriverインスタンスにデフォルトでローカルファイルディテクターが追加されますが、独自のクラスを作成することも可能です。
driver . file_detector = LocalFileDetector ()
file_input = driver . find_element ( By . CSS_SELECTOR , "input[type='file']" )
file_input . send_keys ( upload_file )
driver . find_element ( By . ID , "file-submit" ) . click ()
.NETでは、リモートWebDriverインスタンスにデフォルトでローカルファイルディテクターが追加されますが、独自のクラスを作成することも可能です。
(( RemoteWebDriver ) driver ). FileDetector = new LocalFileDetector ();
IWebElement fileInput = driver . FindElement ( By . CssSelector ( "input[type=file]" ));
fileInput . SendKeys ( uploadFile );
driver . FindElement ( By . Id ( "file-submit" )). Click ();
Rubyでは、リモートWebDriverインスタンスにデフォルトでローカルファイルディテクターが追加されますが、独自のラムダを作成することも可能です。
driver . file_detector = -> (( filename , * )) { filename . include? ( 'selenium' ) && filename }
file_input = driver . find_element ( css : 'input[type=file]' )
file_input . send_keys ( upload_file )
driver . find_element ( id : 'file-submit' ) . click
ダウンロード Chrome、Edge、およびFirefoxでは、それぞれダウンロードディレクトリの場所を設定できます。 ただし、リモートコンピュータでこれを行う場合、その場所はリモートコンピュータのローカルファイルシステム上にあります。Seleniumを使用すると、クライアントコンピュータにこれらのファイルをダウンロードできるように設定することが可能です。
グリッドでのダウンロードを有効化 クライアントに関係なく、ノードまたはスタンドアロンモードでグリッドを起動する際には、次のフラグを追加する必要があります:
--enable-managed-downloads true
クライアントでのダウンロードを有効化 グリッドは、se:downloadsEnabled
機能を使用して、ブラウザの場所を管理する責任を持つかどうかを切り替えます。各バインディングには、これを設定するためのオプションクラスのメソッドがあります。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions options = new ChromeOptions ();
options . setEnableDownloads ( true );
driver = new RemoteWebDriver ( gridUrl , options );
options = webdriver . ChromeOptions ()
options . enable_downloads = True
driver = webdriver . Remote ( command_executor = server , options = options )
ChromeOptions options = new ChromeOptions
{
EnableDownloads = true
};
driver = new RemoteWebDriver ( GridUrl , options );
options = Selenium :: WebDriver :: Options . chrome ( enable_downloads : true )
driver = Selenium :: WebDriver . for :remote , url : grid_url , options : options
ダウンロード可能なファイルの一覧 Seleniumはファイルのダウンロードが完了するのを待たないため、リストは指定されたセッションのディレクトリに現在存在するファイル名の即時スナップショットであることに注意してください。
Java
Python
CSharp
Ruby
JavaScript
Kotlin List < String > files = (( HasDownloads ) driver ). getDownloadableFiles ();
files = driver . get_downloadable_files ()
IReadOnlyList < string > names = (( RemoteWebDriver ) driver ). GetDownloadableFiles ();
files = driver . downloadable_files
ファイルをダウンロード Seleniumは、提供されたファイルの名前をリストの中で探し、指定されたターゲットディレクトリにダウンロードします。
Java
Python
CSharp
Ruby
JavaScript
Kotlin (( HasDownloads ) driver ). downloadFile ( downloadableFile , targetDirectory );
driver . download_file ( downloadable_file , target_directory )
(( RemoteWebDriver ) driver ). DownloadFile ( downloadableFile , targetDirectory );
driver . download_file ( downloadable_file , target_directory )
ダウンロードしたファイルの削除 デフォルトでは、ダウンロードディレクトリは該当するセッションの終了時に削除されますが、セッション中にすべてのファイルを削除することもできます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin (( HasDownloads ) driver ). deleteDownloadableFiles ();
driver . delete_downloadable_files ()
(( RemoteWebDriver ) driver ). DeleteDownloadableFiles ();
driver . delete_downloadable_files
ブラウザ特有の機能 各 ブラウザ は、そのブラウザにのみ利用可能な特別な機能を実装しています。各Seleniumバインディングは、リモートセッションでそれらの機能を使用するための異なる方法を実装しています。
Java
Python
CSharp
Ruby
JavaScript
Kotlin Javaでは、Augmenterクラスを使用する必要があります。これにより、RemoteWebDriverで使用される機能に一致するすべてのインターフェースの実装を自動的に取り込むことができます。
driver = new Augmenter (). augment ( driver );
興味深いことに、RemoteWebDriverBuilderを使用すると、ドライバーが自動的に拡張されるため、デフォルトで全ての機能を取得するのに最適な方法です。
RemoteWebDriver . builder ()
. address ( gridUrl )
. oneOf ( new ChromeOptions ())
. setCapability ( "ext:options" , Map . of ( "key" , "value" ))
. config ( ClientConfig . defaultConfig ())
. build ();
.NETでは、リモートドライバーで指定されたブラウザに対して有効なコマンドを実行するために、カスタムコマンドエグゼキュータを使用します。
var customCommandDriver = driver as ICustomDriverCommandExecutor ;
customCommandDriver . RegisterCustomDriverCommands ( FirefoxDriver . CustomCommandDefinitions );
var screenshotResponse = customCommandDriver
. ExecuteCustomDriverCommand ( FirefoxDriver . GetFullPageScreenshotCommand , null );
Rubyでは、ミキシンを使用してリモートWebDriverセッションに適用可能なブラウザ特有のメソッドを追加します。これらのメソッドは常にそのまま機能するはずです。
クライアントのリクエストをトレースする この機能は、Java クライアント バインディング (ベータ版以降) でのみ利用できます。
Remote WebDriver クライアントは Selenium Grid サーバーにリクエストを送信し、
Selenium Grid サーバーはリクエストを WebDriver に渡します。
HTTP リクエストをエンド ツー エンドでトレースするには、サーバー側とクライアント側でトレースを有効にする必要があります。
両端には、視覚化フレームワークを指すトレース エクスポーターのセットアップが必要です。
デフォルトでは、トレースはクライアントとサーバーの両方で有効になっています。
視覚化フレームワークの Jaeger UI と Selenium Grid 4 を設定するには、目的のバージョンの
トレースのセットアップ を参照してください。
クライアント側のセットアップについては、以下の手順に従ってください。
必要な依存関係を追加する トレーシング エクスポーターの外部ライブラリのインストールは、Maven を使って実行できます。
プロジェクト pom.xml に opentelemetry-exporter-jaeger および grpc-netty の依存関係を追加します。
<dependency>
<groupId> io.opentelemetry</groupId>
<artifactId> opentelemetry-exporter-jaeger</artifactId>
<version> 1.0.0</version>
</dependency>
<dependency>
<groupId> io.grpc</groupId>
<artifactId> grpc-netty</artifactId>
<version> 1.35.0</version>
</dependency>
クライアントの実行中に必要なシステムプロパティを追加/渡す System . setProperty ( "otel.traces.exporter" , "jaeger" );
System . setProperty ( "otel.exporter.jaeger.endpoint" , "http://localhost:14250" );
System . setProperty ( "otel.resource.attributes" , "service.name=selenium-java-client" );
ImmutableCapabilities capabilities = new ImmutableCapabilities ( "browserName" , "chrome" );
WebDriver driver = new RemoteWebDriver ( new URL ( "http://www.example.com" ), capabilities );
driver . get ( "http://www.google.com" );
driver . quit ();
ご希望のSeleniumのバージョンに必要な外部依存関係のバージョンの詳細については、
トレースのセットアップ を参照してください。
詳細については、下記URLを参照してください。
3 - 対応ブラウザ 各ブラウザにはカスタム機能とユニークな特徴があります。
3.1 - Chrome固有の機能 これらは、Google Chromeブラウザに特有の機能と機能です。
これらは、Google Chromeブラウザに特有の機能と機能です。
デフォルトでは、Selenium 4はChrome v75以上と互換性があります。Chromeブラウザのバージョンとchromedriverのバージョンは、メジャーバージョンが一致する必要があることに注意してください。
Options すべてのブラウザに共通する機能は オプション ページ に記載されています。
ChromeおよびChromiumに特有の機能は、Googleの Capabilities & ChromeOptions のページにドキュメントされています。
基本的に定義されたオプションでChromeセッションを開始する場合は、次のようになります:
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions options = new ChromeOptions ();
driver = new ChromeDriver ( options );
options = webdriver . ChromeOptions ()
driver = webdriver . Chrome ( options = options )
var options = new ChromeOptions ();
driver = new ChromeDriver ( options );
options = Selenium :: WebDriver :: Options . chrome
@driver = Selenium :: WebDriver . for :chrome , options : options
const Options = new Chrome . Options ();
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( Options )
. build ();
引数 args
パラメータは、ブラウザを起動する際に使用するコマンドラインスイッチのリストです。これらの引数を調査するための優れたリソースが2つあります:
一般的に使用されるargsには以下が含まれます:--start-maximized
, --headless=new
and --user-data-dir=...
オプションに引数を追加:
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . addArguments ( "--start-maximized" );
options . add_argument ( "--start-maximized" )
options . AddArgument ( "--start-maximized" );
options . args << '--start-maximized'
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options . addArguments ( '--headless=new' ))
. build ();
指定したロケーションでブラウザを起動する binary
パラメーターは、使用するブラウザの別のロケーションのパスを取ります。
このパラメーターを使用すると、chromedriver を使用して、さまざまな Chromium ベースのブラウザを駆動できます。
オプションにブラウザのロケーションを追加します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . setBinary ( getChromeLocation ());
options . binary_location = chrome_bin
options . BinaryLocation = GetChromeLocation ();
options . binary = chrome_location
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options . setChromeBinaryPath ( `Path to chrome binary` ))
. build ();
拡張機能を追加する extensions
パラメーターはcrxファイルを受け入れます
The extensions
パラメータはcrxファイルを受け入れます。解凍されたディレクトリについては、代わりに load-extension
引数を使用してください。この投稿 で述べたように。
オプションに拡張機能を追加します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . addExtensions ( extensionFilePath );
options . add_extension ( extension_file_path )
options . AddExtension ( extensionFilePath );
options . add_extension ( extension_file_path )
const options = new Chrome . Options ();
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options . addExtensions ([ './test/resources/extensions/webextensions-selenium-example.crx' ]))
. build ();
ブラウザを開いたままにする detach
パラメータをtrueに設定すると、ドライバープロセスが終了した後もブラウザを開いたままにできます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin 注意 : これはすでにJavaのデフォルトの動作です。
options . add_experimental_option ( "detach" , True )
注意 : これはすでに.NETのデフォルトの動作です。
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options . detachDriver ( true ))
. build ();
引数を除外する Chrome はさまざまな引数を追加します。
これらの引数を追加したくない場合は、それらを excludeSwitches
に渡します。
一般的な例は、ポップアップブロッカーをオンに設定することです。
デフォルトの引数の完全なリストは、
Chromium Source Code から解析できます。
オプションに除外された引数を設定します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . setExperimentalOption ( "excludeSwitches" , List . of ( "disable-popup-blocking" ));
options . add_experimental_option ( 'excludeSwitches' , [ 'disable-popup-blocking' ])
options . AddExcludedArgument ( "disable-popup-blocking" );
options . exclude_switches << 'disable-popup-blocking'
let driver = new Builder ()
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options . excludeSwitches ( 'enable-automation' ))
. build ();
サービス デフォルトのServiceオブジェクトを作成するための例や、ドライバーの場所とポートを設定する方法は、Driver Service ページにあります。
ログ出力 ドライバーログを取得することは、問題のデバッグに役立ちます。Serviceクラスを使用すると、ログの出力先を指定できます。ユーザーがどこかにログを指示しない限り、ログ出力は無視されます。
ファイル出力 ログ出力を特定のファイルに保存するように変更するには:
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeDriverService service =
new ChromeDriverService . Builder (). withLogFile ( logLocation ). build ();
注意 : Javaでは、システムプロパティによってファイル出力を設定することもできます: プロパティキー: ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY
プロパティ値: ログファイルへのパスを表す文字列
Selenium v4.11
service = webdriver . ChromeService ( log_output = log_path )
service . LogPath = GetLogLocation ();
コンソール出力 ログ出力をコンソールにSTDOUTとして表示するように変更するには:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
ChromeDriverService service =
new ChromeDriverService . Builder (). withLogOutput ( System . out ). build ();
注意 : Javaでは、システムプロパティによってコンソール出力を設定することもできます。 プロパティキー: ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY
プロパティ値: DriverService.LOG_STDOUT
または DriverService.LOG_STDERR
Selenium v4.11
service = webdriver . ChromeService ( log_output = subprocess . STDOUT )
$stdout
と $stderr
はどちらも有効な値です。
Selenium v4.10
ログレベル 利用可能なログレベルは6つあります:ALL
, DEBUG
, INFO
, WARNING
, SEVERE
, そして OFF
。--verbose
は --log-level=ALL
と同等であり、--silent
は --log-level=OFF
と同等であることに注意してください。このため、この例ではログレベルを一般的に設定しています:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
ChromeDriverService service =
new ChromeDriverService . Builder (). withLogLevel ( ChromiumDriverLogLevel . DEBUG ). build ();
注意 : Javaでは、システムプロパティによってログレベルを設定することもできます: プロパティキー: ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY
プロパティ値: ChromiumDriverLogLevel
列挙型の文字列表現
Selenium v4.11
service = webdriver . ChromeService ( service_args = [ '--log-level=DEBUG' ], log_output = subprocess . STDOUT )
Selenium v4.10
service . args << '--log-level=DEBUG'
ログファイル機能 ファイルにログを記録する際にのみ利用できる2つの機能があります:
これらを使用するには、ログパスとログレベルも明示的に指定する必要があります。ログ出力はプロセスではなくドライバーによって管理されるため、若干の違いが見られる場合があります。
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
ChromeDriverService service =
new ChromeDriverService . Builder (). withAppendLog ( true ). withReadableTimestamp ( true ). build ();
注意 : Javaでは、これらの機能をシステムプロパティによって切り替えることもできます: プロパティキー: ChromeDriverService.CHROME_DRIVER_APPEND_LOG_PROPERTY
およびChromeDriverService.CHROME_DRIVER_READABLE_TIMESTAMP
プロパティ値: "true"
または "false"
service = webdriver . ChromeService ( service_args = [ '--append-log' , '--readable-timestamp' ], log_output = log_path )
Selenium v4.8
service . args << '--append-log'
service . args << '--readable-timestamp'
ビルドチェックの無効化 ChromedriverとChromeブラウザのバージョンは一致する必要があり、一致しない場合、ドライバーはエラーを返します。ビルドチェックを無効にすると、任意のバージョンのChromeでドライバーを強制的に使用できます。ただし、これはサポートされていない機能であり、バグは調査されません。
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
ChromeDriverService service =
new ChromeDriverService . Builder (). withBuildCheckDisabled ( true ). build ();
注意 : Javaでは、システムプロパティによってビルドチェックを無効にすることもできます: プロパティキー: ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK
プロパティ値: "true"
または "false"
Selenium v4.11
service = webdriver . ChromeService ( service_args = [ '--disable-build-check' ], log_output = subprocess . STDOUT )
service . DisableBuildCheck = true ;
Selenium v4.8
service . args << '--disable-build-check'
特別な機能 一部のブラウザは、それぞれに特有の追加機能を実装しています。
キャスティング Chrome Castデバイスを操作することができ、タブの共有も含まれます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin List < Map < String , String >> sinks = driver . getCastSinks ();
if ( ! sinks . isEmpty ()) {
String sinkName = sinks . get ( 0 ). get ( "name" );
driver . startTabMirroring ( sinkName );
driver . stopCasting ( sinkName );
}
sinks = driver . get_sinks ()
if sinks :
sink_name = sinks [ 0 ][ 'name' ]
driver . start_tab_mirroring ( sink_name )
driver . stop_casting ( sink_name )
sinks = @driver . cast_sinks
unless sinks . empty?
device_name = sinks . first [ 'name' ]
@driver . start_cast_tab_mirroring ( device_name )
expect { @driver . stop_casting ( device_name ) } . not_to raise_exception
end
ネットワークの状態 さまざまなネットワークの状態をシミュレートできます。
以下の例はローカルWebDriver用です。リモートWebDriverについては、リモートWebDriver ページを参照してください。
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions ();
networkConditions . setOffline ( false );
networkConditions . setLatency ( java . time . Duration . ofMillis ( 20 )); // 20 ms of latency
networkConditions . setDownloadThroughput ( 2000 * 1024 / 8 ); // 2000 kbps
networkConditions . setUploadThroughput ( 2000 * 1024 / 8 ); // 2000 kbps
(( ChromeDriver ) driver ). setNetworkConditions ( networkConditions );
network_conditions = {
"offline" : False ,
"latency" : 20 , # 20 ms of latency
"download_throughput" : 2000 * 1024 / 8 , # 2000 kbps
"upload_throughput" : 2000 * 1024 / 8 , # 2000 kbps
}
driver . set_network_conditions ( ** network_conditions )
@driver . network_conditions = { offline : false , latency : 100 , throughput : 200 }
ログ
Java
Python
CSharp
Ruby
JavaScript
Kotlin LogEntries logs = driver . manage (). logs (). get ( LogType . BROWSER );
logs = driver . get_log ( "browser" )
logs = @driver . logs . get ( :browser )
パーミッション
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver . setPermission ( "camera" , "denied" );
driver . set_permissions ( 'camera' , 'denied' )
@driver . add_permission ( 'camera' , 'denied' )
@driver . add_permissions ( 'clipboard-read' => 'denied' , 'clipboard-write' => 'prompt' )
デベロッパー ツール Chromeデベロッパーツールの使用に関する詳細については、[Chromeデベロッパー ツール] セクションを参照してください。
3.2 - Edge固有の機能 これらは、Microsoft Edgeブラウザに固有のCapabilityです。
Microsoft EdgeはChromiumで実装されており、サポートされている最も古いバージョンはv79です。
Chromeと同様に、edgedriverのメジャー バージョン番号は、Edgeブラウザのメジャーバージョンと一致する必要があります。
Chromeページ にあるすべての機能とオプションは、Edgeでも機能します。
オプション すべてのブラウザに共通する機能はオプション ページ に記載されています。
Chromiumに特有の機能は、GoogleのCapabilities & ChromeOptions ページに文書化されています。
基本的な定義済みオプションを使用して Edgeセッションを開始すると、次のようになります。
Java
Python
CSharp
Ruby
JavaScript
Kotlin public void basicOptions () {
EdgeOptions options = new EdgeOptions ();
options = webdriver . EdgeOptions ()
driver = webdriver . Edge ( options = options )
var options = new EdgeOptions ();
driver = new EdgeDriver ( options );
options = Selenium :: WebDriver :: Options . edge
@driver = Selenium :: WebDriver . for :edge , options : options
let options = new edge . Options ();
driver = new Builder ()
. forBrowser ( Browser . EDGE )
. setEdgeOptions ( options )
. build ();
引数 args
パラメータは、ブラウザを起動する際に使用されるコマンドラインスイッチのリストです。これらの引数を調査するための優れたリソースが2つあります:
一般的に使用される引数には、--start-maximized
および --headless=new
が含まれます。 and --user-data-dir=...
オプションに引数を追加します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . add_argument ( "--start-maximized" )
options . AddArgument ( "--start-maximized" );
options . args << '--start-maximized'
. setEdgeOptions ( options . addArguments ( '--headless=new' ))
指定された場所でブラウザを起動する binary
パラメータは、使用するブラウザの代替位置のパスを指定します。このパラメータを使用すると、chromedriverを利用してさまざまなChromiumベースのブラウザを操作できます。
オプションにブラウザの場所を追加する:
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . binary_location = edge_bin
options . BinaryLocation = GetEdgeLocation ();
options . binary = edge_location
拡張機能を追加する extensions
パラメータは、crxファイルを受け入れます。展開されたディレクトリについては、load-extension
引数を使用してください。このことはこの投稿 で言及されています。
オプションに拡張機能を追加する:
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . add_extension ( extension_file_path )
options . AddExtension ( extensionFilePath );
options . add_extension ( extension_file_path )
. setEdgeOptions ( options . addExtensions ([ './test/resources/extensions/webextensions-selenium-example.crx' ]))
ブラウザを開いたままにする detach
パラメータをtrue に設定すると、プロセスが終了した後でもブラウザが開いたままになります。ただし、quit コマンドがドライバーに送信されない限り、ブラウザは開いたままになります。
Java
Python
CSharp
Ruby
JavaScript
Kotlin 注意 : これはすでにJavaのデフォルトの動作です。
options . add_experimental_option ( "detach" , True )
注意 : これはすでに.NETのデフォルトの動作です。
. setEdgeOptions ( options . detachDriver ( true ))
引数を除外する MSEdgedriverには、ブラウザを起動するために使用されるいくつかのデフォルト引数があります。それらの引数を追加したくない場合は、excludeSwitches
に渡してください。一般的な例は、ポップアップブロッカーを再度オンにすることです。デフォルト引数の完全なリストはChromium Source Code から解析できます。
オプションに除外された引数を設定する:
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . add_experimental_option ( 'excludeSwitches' , [ 'disable-popup-blocking' ])
options . AddExcludedArgument ( "disable-popup-blocking" );
options . exclude_switches << 'disable-popup-blocking'
. setEdgeOptions ( options . excludeSwitches ( 'enable-automation' ))
サービス デフォルトのサービスオブジェクトを作成するための例や、ドライバの場所とポートを設定する例は、Driver Service ページにあります。
ログ出力 ドライバのログを取得することは、問題をデバッグするのに役立ちます。サービスクラスを使用すると、ログの出力先を指定できます。ユーザーがどこかにログを指示しない限り、ログ出力は無視されます。
ファイル出力 特定のファイルに保存するようにログ出力を変更するには、以下のようにします:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
File logLocation = getTempFile ( "logsToFile" , ".log" );
注意 : Javaでもシステムプロパティを使用してファイル出力を設定できます: プロパティキー: EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY
プロパティ値: ログファイルのパスを表す文字列
service = webdriver . EdgeService ( log_output = log_path )
service . LogPath = GetLogLocation ();
コンソール出力 ログ出力をコンソールにSTDOUTとして表示するには:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
注 : Javaでは、システムプロパティを使用してコンソール出力を設定することもできます。 プロパティキー: EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY
プロパティ値:DriverService.LOG_STDOUT
または DriverService.LOG_STDERR
Selenium v4.11
service = webdriver . EdgeService ( log_output = subprocess . STDOUT )
$stdout
と $stderr
はどちらも有効な値です。
Selenium v4.10
ログレベル 利用可能なログレベルは6つあります:ALL
, DEBUG
, INFO
, WARNING
, SEVERE
および OFF
。--verbose
は --log-level=ALL
と同等であり、--silent
は--log-level=OFF
と同等です。したがって、この例ではログレベルを一般的に設定しています:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
EdgeDriverService service =
注意 : Javaでは、システムプロパティを使用してログレベルを設定することもできます: プロパティキー: EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY
プロパティ値:ChromiumDriverLogLevel
列挙型の文字列表現
service = webdriver . EdgeService ( service_args = [ '--log-level=DEBUG' ], log_output = log_path )
Selenium v4.10
service . args << '--log-level=DEBUG'
ログファイルの機能 ファイルにログを記録する際にのみ利用可能な2つの機能があります:
これらを使用するには、ログパスとログレベルも明示的に指定する必要があります。ログ出力はプロセスではなくドライバによって管理されるため、若干の違いが見られることがあります。
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
EdgeDriverService service =
注意 : Javaでは、これらの機能をSystem Propertyによって切り替えることもできます: プロパティキー:EdgeDriverService.EDGE_DRIVER_APPEND_LOG_PROPERTY
および EdgeDriverService.EDGE_DRIVER_READABLE_TIMESTAMP
プロパティ値: "true"
または "false"
service = webdriver . EdgeService ( service_args = [ '--append-log' , '--readable-timestamp' ], log_output = log_path )
Selenium v4.8
service . args << '--append-log'
service . args << '--readable-timestamp'
ビルドチェックの無効化 Edge ブラウザとmsedgedriverのバージョンは一致する必要があり、一致しない場合はドライバにエラーが表示されます。ビルドチェックを無効にすると、任意のバージョンのEdgeでドライバを強制的に使用できます。
この機能はサポートされていないことに注意してください。バグは調査されません。
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
EdgeDriverService service =
注 : Javaでは、システムプロパティを使用してビルドチェックを無効にすることもできます: プロパティキー:EdgeDriverService.EDGE_DRIVER_DISABLE_BUILD_CHECK
プロパティ値: "true"
または "false"
service = webdriver . EdgeService ( service_args = [ '--disable-build-check' ], log_output = log_path )
service . DisableBuildCheck = true ;
Selenium v4.8
service . args << '--disable-build-check'
Internet Explorer Compatibility モード Microsoft Edge は、Internet Explorer ドライバークラスを Microsoft Edgeと組み合わせて使用する
“Internet Explorer 互換モード"で動かすことができます。
詳細については、Internet Explorerページ を参照してください。
特別な機能 一部のブラウザは、それぞれ特有の追加機能を実装しています。
キャスティング Edge を使用して Chrome Cast デバイスを操作し、タブを共有することができます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin List < Map < String , String >> sinks = driver . getCastSinks ();
if ( ! sinks . isEmpty ()) {
String sinkName = sinks . get ( 0 ). get ( "name" );
driver . startTabMirroring ( sinkName );
driver . stopCasting ( sinkName );
}
sinks = driver . get_sinks ()
if sinks :
sink_name = sinks [ 0 ][ 'name' ]
driver . start_tab_mirroring ( sink_name )
driver . stop_casting ( sink_name )
sinks = @driver . cast_sinks
unless sinks . empty?
device_name = sinks . first [ 'name' ]
@driver . start_cast_tab_mirroring ( device_name )
expect { @driver . stop_casting ( device_name ) } . not_to raise_exception
ネットワーク条件 さまざまなネットワーク条件をシミュレートすることができます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin
ChromiumNetworkConditions networkConditions = new ChromiumNetworkConditions ();
networkConditions . setOffline ( false );
networkConditions . setLatency ( java . time . Duration . ofMillis ( 20 )); // 20 ms of latency
networkConditions . setDownloadThroughput ( 2000 * 1024 / 8 ); // 2000 kbps
networkConditions . setUploadThroughput ( 2000 * 1024 / 8 ); // 2000 kbps
network_conditions = {
"offline" : False ,
"latency" : 20 , # 20 ms of latency
"download_throughput" : 2000 * 1024 / 8 , # 2000 kbps
"upload_throughput" : 2000 * 1024 / 8 , # 2000 kbps
}
driver . set_network_conditions ( ** network_conditions )
@driver . network_conditions = { offline : false , latency : 100 , throughput : 200 }
ログ
Java
Python
CSharp
Ruby
JavaScript
Kotlin LogEntries logs = driver . manage (). logs (). get ( LogType . BROWSER );
logs = driver . get_log ( "browser" )
logs = @driver . logs . get ( :browser )
権限
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver . set_permissions ( 'camera' , 'denied' )
@driver . add_permission ( 'camera' , 'denied' )
@driver . add_permissions ( 'clipboard-read' => 'denied' , 'clipboard-write' => 'prompt' )
EdgeでDevToolsを使用する際の詳細については、[Chrome DevTools]セクションを参照してください。
3.3 - Firefox特有の機能 これらは、Mozilla Firefoxブラウザに特有の機能と機能です。
Selenium 4 には Firefox 78 以降が必要です。
常に最新バージョンの geckodriver を使用することをお勧めします。
オプション 全ブラウザに共通のCapabilityについては、オプションページ で説明しています。
Firefox に固有のCapabilityは、Mozilla のページの firefoxOptions にあります。
基本的な定義済みのオプションを使用して Firefox セッションを開始すると、以下のようになります。
Java
Python
CSharp
Ruby
JavaScript
Kotlin FirefoxOptions options = new FirefoxOptions ();
driver = new FirefoxDriver ( options );
options = webdriver . FirefoxOptions ()
driver = webdriver . Firefox ( options = options )
var options = new FirefoxOptions ();
driver = new FirefoxDriver ( options );
options = Selenium :: WebDriver :: Options . firefox
@driver = Selenium :: WebDriver . for :firefox , options : options
driver = new Builder ()
. forBrowser ( Browser . FIREFOX )
. setFirefoxOptions ( options )
. build ();
さまざまなCapabilityを備えた一般的な使用例をいくつか示します。
引数 args
パラメータは、ブラウザの起動時に使用するコマンドラインスイッチのリストです。
一般的に使用される引数には、 -headless
と "-profile"
、"/path/to/profile"
が含まれます。
オプションに引数を追加します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . addArguments ( "-headless" );
options . add_argument ( "-headless" )
options . AddArgument ( "-headless" );
options . args << '-headless'
. setFirefoxOptions ( options . addArguments ( '--headless' ))
指定したロケーションでブラウザを起動する binary
パラメーターは、使用するブラウザーの別のロケーションのパスを取ります。
たとえば、このパラメーターを使用すると、geckodriver を使用して、製品版とFirefox Nightlyの両方がコンピューターに存在する場合、
製品版の代わりに Firefox Nightly を駆動できます 。
オプションにブラウザーのロケーションを追加します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . setBinary ( getFirefoxLocation ());
options . binary_location = firefox_bin
options . BinaryLocation = GetFirefoxLocation ();
options . binary = firefox_location
プロファイル Firefoxプロファイルを操作するにはいくつかの方法があります。
Java
Python
CSharp
Ruby
JavaScript
Kotlin FirefoxProfile profile = new FirefoxProfile ();
FirefoxOptions options = new FirefoxOptions ();
profile . setPreference ( "javascript.enabled" , "False" );
options . setProfile ( profile );
driver = new FirefoxDriver ( options );
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
options = Options ()
firefox_profile = FirefoxProfile ()
firefox_profile . set_preference ( "javascript.enabled" , False )
options . profile = firefox_profile
driver = webdriver . Firefox ( options = options )
var options = new FirefoxOptions ();
var profile = new FirefoxProfile ();
options . Profile = profile ;
var driver = new RemoteWebDriver ( options );
profile = Selenium :: WebDriver :: Firefox :: Profile . new
profile [ 'browser.download.dir' ] = '/tmp/webdriver-downloads'
options = Selenium :: WebDriver :: Firefox :: Options . new ( profile : profile )
const { Builder } = require ( "selenium-webdriver" );
const firefox = require ( 'selenium-webdriver/firefox' );
const options = new firefox . Options ();
let profile = '/path to custom profile' ;
options . setProfile ( profile );
const driver = new Builder ()
. forBrowser ( 'firefox' )
. setFirefoxOptions ( options )
. build ();
val options = FirefoxOptions ()
options . profile = FirefoxProfile ()
driver = RemoteWebDriver ( options )
サービス すべてのブラウザに共通するサービス設定は、Service page に記載されています。
ログ出力 ドライバーログを取得することは、さまざまな問題のデバッグに役立ちます。サービスクラスを使用すると、ログの保存先を指定できます。ログ出力は、ユーザーがどこかに指定しない限り無視されます。
ファイル出力 特定のファイルにログ出力を保存するには:
Java
Python
CSharp
Ruby
JavaScript
Kotlin FirefoxDriverService service =
new GeckoDriverService . Builder (). withLogFile ( logLocation ). build ();
注 : Java では、システムプロパティによってファイル出力を設定することもできます。 プロパティキー:GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY
プロパティ値: ログファイルへのパスを表す文字列
Selenium v4.11
service = webdriver . FirefoxService ( log_output = log_path , service_args = [ '--log' , 'debug' ])
コンソール出力 ログ出力をコンソールに表示するには、以下のようにします:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
FirefoxDriverService service =
new GeckoDriverService . Builder (). withLogOutput ( System . out ). build ();
注意 : Javaは、システムプロパティを使用してコンソール出力を設定することもできます; プロパティキー: GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY
プロパティ値: DriverService.LOG_STDOUT
または DriverService.LOG_STDERR
Selenium v4.11
service = webdriver . FirefoxService ( log_output = subprocess . STDOUT )
ログレベル 利用可能なログレベルは7つあります: fatal
, error
, warn
, info
, config
, debug
, trace
。
ロギングが指定されている場合、デフォルトのレベルは info
になります。
-v
iは -log debug
と同等であり、-vv
は log trace
と同等です。
したがって、この例は一般的にログレベルを設定するためのものです:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
FirefoxDriverService service =
new GeckoDriverService . Builder (). withLogLevel ( FirefoxDriverLogLevel . DEBUG ). build ();
注意 : Javaは、システムプロパティによってログレベルの設定も可能です: プロパティキー: GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY
プロパティ値:FirefoxDriverLogLevel
列挙型の文字列表現
Selenium v4.11
service = webdriver . FirefoxService ( log_output = log_path , service_args = [ '--log' , 'debug' ])
Selenium v4.10
service . args += %w[--log debug]
トランケートログ ドライバーは、大きなバイナリの文字列表現を含む、送信されたすべてのものをログに記録します。そのため、Firefoxではデフォルトで行が切り捨てられます。切り捨てを無効にするには:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
FirefoxDriverService service =
new GeckoDriverService . Builder (). withTruncatedLogs ( false ). build ();
注意 : Javaでは、システムプロパティによってログレベルを設定することもできます。 プロパティキー: GeckoDriverService.GECKO_DRIVER_LOG_NO_TRUNCATE
プロパティ値: "true"
または "false"
Selenium v4.11
service = webdriver . FirefoxService ( service_args = [ '--log-no-truncate' , '--log' , 'debug' ], log_output = log_path )
Selenium v4.10
service . args << '--log-no-truncate'
プロファイルルート プロファイルのデフォルトディレクトリは、システムの一時ディレクトリです。そのディレクトリにアクセスできない場合や、特定の場所にプロファイルを作成したい場合は、プロファイルルートディレクトリを変更できます:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
FirefoxDriverService service =
new GeckoDriverService . Builder (). withProfileRoot ( profileDirectory ). build ();
注意 : Javaでは、システムプロパティを使用してログレベルを設定することもできます: プロパティキー: GeckoDriverService.GECKO_DRIVER_PROFILE_ROOT
プロパティ値: プロファイルルートディレクトリへのパスを表す文字列
service = webdriver . FirefoxService ( service_args = [ '--profile-root' , temp_dir ])
Selenium v4.8
service . args += [ '--profile-root' , root_directory ]
特別な機能 アドオン Chromeとは異なり、Firefoxの拡張機能はCapabilityの一部として追加されるのではなく、ドライバーの起動後に作成されます。
Chromeとは異なり、Firefoxの拡張機能はこの問題 に記載されているように、機能の一部として追加されるのではなく、ドライバーの起動後に作成されます。
T以下の例はローカルWebDriver用です。リモートWebDriverについては、Remote WebDriver ページを参照してください。
インストール Mozilla Add-Onsページ から取得する署名付きxpiファイル
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver . installExtension ( xpiPath );
driver . install_addon ( addon_path_xpi )
driver . InstallAddOnFromFile ( Path . GetFullPath ( extensionFilePath ));
driver . install_addon ( extension_file_path )
let id = await driver . installAddon ( xpiPath );
アンインストール アドオンをアンインストールするには、そのIDを知る必要があります。
IDはアドオンインストール時の戻り値から取得できます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver . uninstallExtension ( id );
driver . uninstall_addon ( id )
Selenium v4.5
driver . UninstallAddOn ( extensionId );
driver . uninstall_addon ( extension_id )
await driver . uninstallAddon ( id );
署名なしのインストール 未完成または未公開の拡張機能を使用する場合、署名されていない可能性があります。
そのため、“一時的なもの” としてのみインストールできます。
これは、zipファイルまたはディレクトリを渡すことで実行できます。ディレクトリの例を次に示します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver . installExtension ( path , true );
driver . install_addon ( addon_path_dir , temporary = True )
Selenium v4.5
driver . InstallAddOnFromDirectory ( Path . GetFullPath ( extensionDirPath ), true );
Selenium v4.5
driver . install_addon ( extension_dir_path , true )
let id = await driver . installAddon ( xpiPath , true );
ページ全体のスクリーンショット 以下の例はローカルWebDriver用です。リモートWebDriverについては、Remote WebDriver ページを参照してください。
Java
Python
CSharp
Ruby
JavaScript
Kotlin File screenshot = driver . getFullPageScreenshotAs ( OutputType . FILE );
driver . save_full_page_screenshot ( "full_page_screenshot.png" )
screenshot = driver . save_full_page_screenshot ( File . join ( dir , 'screenshot.png' ))
コンテキスト 以下の例はローカルWebDriver用です。リモートWebDriverについては、Remote WebDriver ページを参照してください。
Java
Python
CSharp
Ruby
JavaScript
Kotlin (( HasContext ) driver ). setContext ( FirefoxCommandContext . CHROME );
driver . executeScript ( "console.log('Inside Chrome context');" );
with driver . context ( driver . CONTEXT_CHROME ):
driver . execute_script ( "console.log('Inside Chrome context');" )
driver . context = 'content'
3.4 - IE特有の機能 これらは、Microsoft Internet Explorerブラウザに特有の機能と機能です。
As of June 2022, Selenium officially no longer supports standalone Internet Explorer.
The Internet Explorer driver still supports running Microsoft Edge in “IE Compatibility Mode.”
Special considerations The IE Driver is the only driver maintained by the Selenium Project directly.
While binaries for both the 32-bit and 64-bit
versions of Internet Explorer are available, there are some
known limitations
with the 64-bit driver. As such it is recommended to use the 32-bit driver.
Additional information about using Internet Explorer can be found on the
IE Driver Server page
Options Starting a Microsoft Edge browser in Internet Explorer Compatibility mode with basic defined options looks like this:
Java
Python
CSharp
Ruby
JavaScript
Kotlin InternetExplorerOptions options = new InternetExplorerOptions ();
options . attachToEdgeChrome ();
options . withEdgeExecutablePath ( getEdgeLocation ());
driver = new InternetExplorerDriver ( options );
options = webdriver . IeOptions ()
options . attach_to_edge_chrome = True
options . edge_executable_path = edge_bin
driver = webdriver . Ie ( options = options )
var options = new InternetExplorerOptions ();
options . AttachToEdgeChrome = true ;
options . EdgeExecutablePath = GetEdgeLocation ();
_driver = new InternetExplorerDriver ( options );
options = Selenium :: WebDriver :: IE :: Options . new
options . attach_to_edge_chrome = true
options . edge_executable_path = edge_location
@driver = Selenium :: WebDriver . for :ie , options : options
As of Internet Explorer Driver v4.5.0:
If IE is not present on the system (default in Windows 11), you do not need to
use the two parameters above. IE Driver will use Edge and will automatically locate it. If IE and Edge are both present on the system, you only need to set attaching to Edge,
IE Driver will automatically locate Edge on your system. So, if IE is not on the system, you only need:
Java
Python
CSharp
Ruby
JavaScript
Kotlin InternetExplorerOptions options = new InternetExplorerOptions ();
driver = new InternetExplorerDriver ( options );
options = webdriver . IeOptions ()
driver = webdriver . Ie ( options = options )
var options = new InternetExplorerOptions ();
_driver = new InternetExplorerDriver ( options );
options = Selenium :: WebDriver :: Options . ie
@driver = Selenium :: WebDriver . for :ie , options : options
let driver = await new Builder ()
. forBrowser ( 'internet explorer' )
. setIEOptions ( options )
. build ();
< p >< a href =/ documentation / about / contributing / # moving - examples >
< span class = "selenium-badge-code" data - bs - toggle = "tooltip" data - bs - placement = "right"
title = "One or more of these examples need to be implemented in the examples directory; click for details in the contribution guide" > Move Code </ span ></ a ></ p >
val options = InternetExplorerOptions ()
val driver = InternetExplorerDriver ( options )
Here are a few common use cases with different capabilities:
fileUploadDialogTimeout 環境によっては、ファイルアップロードダイアログを開くときにInternet Explorerがタイムアウトする場合があります。 IEDriverのデフォルトのタイムアウトは1000ミリ秒ですが、fileUploadDialogTimeout capabilityを使用してタイムアウトを増やすことができます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin InternetExplorerOptions options = new InternetExplorerOptions ();
options . waitForUploadDialogUpTo ( Duration . ofSeconds ( 2 ));
WebDriver driver = new RemoteWebDriver ( options );
from selenium import webdriver
options = webdriver . IeOptions ()
options . file_upload_dialog_timeout = 2000
driver = webdriver . Ie ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
var options = new InternetExplorerOptions ();
options . FileUploadDialogTimeout = TimeSpan . FromMilliseconds ( 2000 );
var driver = new RemoteWebDriver ( options );
@options . file_upload_dialog_timeout = 2000
const ie = require ( 'selenium-webdriver/ie' );
let options = new ie . Options (). fileUploadDialogTimeout ( 2000 );
let driver = await Builder ()
. setIeOptions ( options )
. build ();
val options = InternetExplorerOptions ()
options . waitForUploadDialogUpTo ( Duration . ofSeconds ( 2 ))
val driver = RemoteWebDriver ( options )
ensureCleanSession この機能を true
に設定すると、手動またはドライバーによって開始されたものを含め、
InternetExplorerの実行中のすべてのインスタンスのキャッシュ、ブラウザー履歴、およびCookieがクリアされます。
デフォルトでは、false
に設定されています。
この機能を使用すると、ドライバーがIEブラウザーを起動する前にキャッシュがクリアされるまで待機するため、
ブラウザーの起動中にパフォーマンスが低下します。
このケイパビリティは、ブール値をパラメーターとして受け入れます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin InternetExplorerOptions options = new InternetExplorerOptions ();
options . destructivelyEnsureCleanSession ();
WebDriver driver = new RemoteWebDriver ( options );
from selenium import webdriver
options = webdriver . IeOptions ()
options . ensure_clean_session = True
driver = webdriver . Ie ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
var options = new InternetExplorerOptions ();
options . EnsureCleanSession = true ;
var driver = new RemoteWebDriver ( options );
@options . ensure_clean_session = true
const ie = require ( 'selenium-webdriver/ie' );
let options = new ie . Options (). ensureCleanSession ( true );
let driver = await Builder ()
. setIeOptions ( options )
. build ();
val options = InternetExplorerOptions ()
options . destructivelyEnsureCleanSession ()
val driver = RemoteWebDriver ( options )
ignoreZoomSetting InternetExplorerドライバーは、ブラウザーのズームレベルが100%であることを想定しています。
それ以外の場合、ドライバーは例外をスローします。
このデフォルトの動作は、 ignoreZoomSetting を true に設定することで無効にできます。
このケイパビリティは、ブール値をパラメーターとして受け入れます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin InternetExplorerOptions options = new InternetExplorerOptions ();
options . ignoreZoomSettings ();
WebDriver driver = new RemoteWebDriver ( options );
from selenium import webdriver
options = webdriver . IeOptions ()
options . ignore_zoom_level = True
driver = webdriver . Ie ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
var options = new InternetExplorerOptions ();
options . IgnoreZoomLevel = true ;
var driver = new RemoteWebDriver ( options );
@options . ignore_zoom_level = true
const ie = require ( 'selenium-webdriver/ie' );
let options = new ie . Options (). ignoreZoomSetting ( true );
let driver = await Builder ()
. setIeOptions ( options )
. build ();
val options = InternetExplorerOptions ()
options . ignoreZoomSettings ()
val driver = RemoteWebDriver ( options )
ignoreProtectedModeSettings 新しいIEセッションの起動中に 保護モード チェックをスキップするかどうか。
設定されておらず、 保護モード 設定がすべてのゾーンで同じでない場合、
ドライバーによって例外がスローされます。
ケイパビリティを true
に設定すると、テストが不安定になったり、応答しなくなったり、
ブラウザがハングしたりする場合があります。
ただし、これはまだ2番目に良い選択であり、最初の選択は 常に
各ゾーンの保護モード設定を手動で実際に設定することです。
ユーザーがこのプロパティを使用している場合、「ベストエフォート」のみがサポートされます。
このケイパビリティは、ブール値をパラメーターとして受け入れます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin InternetExplorerOptions options = new InternetExplorerOptions ();
options . introduceFlakinessByIgnoringSecurityDomains ();
WebDriver driver = new RemoteWebDriver ( options );
from selenium import webdriver
options = webdriver . IeOptions ()
options . ignore_protected_mode_settings = True
driver = webdriver . Ie ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
var options = new InternetExplorerOptions ();
options . IntroduceInstabilityByIgnoringProtectedModeSettings = true ;
var driver = new RemoteWebDriver ( options );
@options . ignore_protected_mode_settings = true
const ie = require ( 'selenium-webdriver/ie' );
let options = new ie . Options (). introduceFlakinessByIgnoringProtectedModeSettings ( true );
let driver = await Builder ()
. setIeOptions ( options )
. build ();
val options = InternetExplorerOptions ()
options . introduceFlakinessByIgnoringSecurityDomains ()
val driver = RemoteWebDriver ( options )
silent true
に設定すると、このケイパビリティはIEDriverServerの診断出力を抑制します。
このケイパビリティは、ブール値をパラメーターとして受け入れます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin InternetExplorerOptions options = new InternetExplorerOptions ();
options . setCapability ( "silent" , true );
WebDriver driver = new InternetExplorerDriver ( options );
from selenium import webdriver
options = webdriver . IeOptions ()
options . set_capability ( "silent" , True )
driver = webdriver . Ie ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
InternetExplorerOptions options = new InternetExplorerOptions ();
options . AddAdditionalInternetExplorerOption ( "silent" , true );
IWebDriver driver = new InternetExplorerDriver ( options );
const { Builder , By , Capabilities } = require ( 'selenium-webdriver' );
let caps = Capabilities . ie ();
caps . set ( 'silent' , true );
( async function example () {
let driver = await new Builder ()
. forBrowser ( 'internet explorer' )
. withCapabilities ( caps )
. build ();
try {
await driver . get ( 'http://www.google.com/ncr' );
}
finally {
await driver . quit ();
}
})();
import org.openqa.selenium.Capabilities
import org.openqa.selenium.ie.InternetExplorerDriver
import org.openqa.selenium.ie.InternetExplorerOptions
fun main () {
val options = InternetExplorerOptions ()
options . setCapability ( "silent" , true )
val driver = InternetExplorerDriver ( options )
try {
driver . get ( "https://google.com/ncr" )
val caps = driver . getCapabilities ()
println ( caps )
} finally {
driver . quit ()
}
}
IE Command-Line Options Internet Explorerには、ブラウザーのトラブルシューティングと構成を可能にするいくつかのコマンドラインオプションが含まれています。
次に、サポートされているいくつかのコマンドラインオプションについて説明します。
-private : IEをプライベートブラウジングモードで起動するために使用されます。
これはIE 8以降のバージョンで機能します。
-k : Internet Explorerをキオスクモードで起動します。
ブラウザは、アドレスバー、ナビゲーションボタン、またはステータスバーを表示しない最大化されたウィンドウで開きます。
-extoff : アドオンなしモードでIEを起動します。
このオプションは、ブラウザーのアドオンに関する問題のトラブルシューティングに特に使用されます。
IE 7以降のバージョンで動作します。
注:コマンドライン引数が機能するためには、 forceCreateProcessApi を順番に有効にする必要があります。
Java
Python
CSharp
Ruby
JavaScript
Kotlin import org.openqa.selenium.Capabilities ;
import org.openqa.selenium.ie.InternetExplorerDriver ;
import org.openqa.selenium.ie.InternetExplorerOptions ;
public class ieTest {
public static void main ( String [] args ) {
InternetExplorerOptions options = new InternetExplorerOptions ();
options . useCreateProcessApiToLaunchIe ();
options . addCommandSwitches ( "-k" );
InternetExplorerDriver driver = new InternetExplorerDriver ( options );
try {
driver . get ( "https://google.com/ncr" );
Capabilities caps = driver . getCapabilities ();
System . out . println ( caps );
} finally {
driver . quit ();
}
}
}
from selenium import webdriver
options = webdriver . IeOptions ()
options . add_argument ( '-private' )
options . force_create_process_api = True
driver = webdriver . Ie ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
using System ;
using OpenQA.Selenium ;
using OpenQA.Selenium.IE ;
namespace ieTest {
class Program {
static void Main ( string [] args ) {
InternetExplorerOptions options = new InternetExplorerOptions ();
options . ForceCreateProcessApi = true ;
options . BrowserCommandLineArguments = "-k" ;
IWebDriver driver = new InternetExplorerDriver ( options );
driver . Url = "https://google.com/ncr" ;
}
}
}
@options . add_argument ( '-k' )
const ie = require ( 'selenium-webdriver/ie' );
let options = new ie . Options ();
options . addBrowserCommandSwitches ( '-k' );
options . addBrowserCommandSwitches ( '-private' );
options . forceCreateProcessApi ( true );
driver = await env . builder ()
. setIeOptions ( options )
. build ();
import org.openqa.selenium.Capabilities
import org.openqa.selenium.ie.InternetExplorerDriver
import org.openqa.selenium.ie.InternetExplorerOptions
fun main () {
val options = InternetExplorerOptions ()
options . useCreateProcessApiToLaunchIe ()
options . addCommandSwitches ( "-k" )
val driver = InternetExplorerDriver ( options )
try {
driver . get ( "https://google.com/ncr" )
val caps = driver . getCapabilities ()
println ( caps );
} finally {
driver . quit ()
}
}
forceCreateProcessApi CreateProcess APIを使用してInternet Explorerを強制的に起動します。
デフォルト値はfalseです。
IE 8以降の場合、このオプションでは “TabProcGrowth” レジストリの値を0に設定する必要があります。
Java
Python
CSharp
Ruby
JavaScript
Kotlin import org.openqa.selenium.Capabilities ;
import org.openqa.selenium.ie.InternetExplorerDriver ;
import org.openqa.selenium.ie.InternetExplorerOptions ;
public class ieTest {
public static void main ( String [] args ) {
InternetExplorerOptions options = new InternetExplorerOptions ();
options . useCreateProcessApiToLaunchIe ();
InternetExplorerDriver driver = new InternetExplorerDriver ( options );
try {
driver . get ( "https://google.com/ncr" );
Capabilities caps = driver . getCapabilities ();
System . out . println ( caps );
} finally {
driver . quit ();
}
}
}
from selenium import webdriver
options = webdriver . IeOptions ()
options . force_create_process_api = True
driver = webdriver . Ie ( options = options )
driver . get ( "http://www.google.com" )
driver . quit ()
using System ;
using OpenQA.Selenium ;
using OpenQA.Selenium.IE ;
namespace ieTest {
class Program {
static void Main ( string [] args ) {
InternetExplorerOptions options = new InternetExplorerOptions ();
options . ForceCreateProcessApi = true ;
IWebDriver driver = new InternetExplorerDriver ( options );
driver . Url = "https://google.com/ncr" ;
}
}
}
@options . force_create_process_api = true
const ie = require ( 'selenium-webdriver/ie' );
let options = new ie . Options ();
options . forceCreateProcessApi ( true );
driver = await env . builder ()
. setIeOptions ( options )
. build ();
import org.openqa.selenium.Capabilities
import org.openqa.selenium.ie.InternetExplorerDriver
import org.openqa.selenium.ie.InternetExplorerOptions
fun main () {
val options = InternetExplorerOptions ()
options . useCreateProcessApiToLaunchIe ()
val driver = InternetExplorerDriver ( options )
try {
driver . get ( "https://google.com/ncr" )
val caps = driver . getCapabilities ()
println ( caps )
} finally {
driver . quit ()
}
}
Service Service settings common to all browsers are described on the Service page .
Log output Getting driver logs can be helpful for debugging various issues. The Service class lets you
direct where the logs will go. Logging output is ignored unless the user directs it somewhere.
File output To change the logging output to save to a specific file:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
. withLogFile ( getLogLocation ())