Seleniumブラウザー自動化プロジェクト Seleniumはブラウザー自動化を可能にし、それを支えるツール群とライブラリー群プロジェクトです。
ユーザーとブラウザーのやり取りのエミュレーション、ブラウザーの割当を増強したり縮減する分散型サーバー、そしてすべてのメジャーなブラウザー用に置換可能なコードの実装を可能にするW3C WebDriver 仕様 インフラの提供します。
このプロジェクトは多くの有志貢献者の何千時間に及ぶ個々の時間を費やした事とソースコード自由に利用可能 を誰にでも利用、楽しめ、そして改良できることによって実現しました。
Seleniumはウェブプラットフォームの自動化のより開かれた議論をするためブラウザーベンダー、エンジニア、愛好家をまとめます。このプロジェクトはコミュニティーを導きと育成のために年次カンファレンス 開催します。
Seleniumの中核はWebDriver であり、様々なブラウザーを変えてインストラクション集を実行できるインターフェースです。これは作りえる一番基本的な
インストラクションの一つです:
Java
Python
CSharp
Ruby
JavaScript
Kotlin package dev.selenium.hello ;
import org.openqa.selenium.WebDriver ;
import org.openqa.selenium.chrome.ChromeDriver ;
public class HelloSelenium {
public static void main ( String [] args ) {
WebDriver driver = new ChromeDriver ();
driver . get ( "https://selenium.dev" );
driver . quit ();
}
}
from selenium import webdriver
driver = webdriver . Chrome ()
driver . get ( "http://selenium.dev" )
driver . quit ()
using OpenQA.Selenium.Chrome ;
namespace SeleniumDocs.Hello ;
public static class HelloSelenium
{
public static void Main ()
{
var driver = new ChromeDriver ();
driver . Navigate (). GoToUrl ( "https://selenium.dev" );
driver . Quit ();
}
}
require 'selenium-webdriver'
driver = Selenium :: WebDriver . for :chrome
driver . get 'https://selenium.dev'
driver . quit
const { Builder , Browser } = require ( 'selenium-webdriver' );
( async function helloSelenium () {
let driver = await new Builder (). forBrowser ( Browser . CHROME ). build ();
await driver . get ( 'https://selenium.dev' );
await driver . quit ();
})();
package dev.selenium.hello
import org.openqa.selenium.chrome.ChromeDriver
fun main () {
val driver = ChromeDriver ()
driver . get ( "https://selenium.dev" )
driver . quit ()
}
概要 を参照して、さまざまなプロジェクトコンポーネントを確認し、
Seleniumが適切なツールであるかどうかを判断してください。
入門 に進んで、
Seleniumをインストールし、テスト自動化ツールとして正常に使用する方法を理解し、
このような単純なテストをスケーリングして、複数のブラウザー、
複数の異なるオペレーティングシステムの大規模な分散環境で実行する必要があります。
1 - 概要 Seleniumはあなたに適していますか?さまざまなプロジェクトのコンポーネントの概要を参照してください。
Seleniumは一つのツールやAPIではありません。たくさんのツールから構成されています。
WebDriver デスクトップのウェブサイトのテスト自動化をはじめるのなら、WebDriver APIを使いましょう。
WebDriver はブラウザ自動化のAPIを使用します。このAPIは、ブラウザをコントロールしてテストを実行するためにブラウザベンダーによって提供されています。これは現実のユーザーがブラウザを操作するかのように動きます。
WebDriverのAPIはアプリケーションのコードと一緒にコンパイルする必要がありませんから、全く邪魔になりません。
これによって、あなたは本番環境と同じアプリケーションをテストすることができます。
IDE IDE (Integrated Development Environment: 統合開発環境)はSeleniumのテストケースを開発するためのツールです。
これは利用しやすいChromeとFirefoxの拡張機能であり、テストケースを開発するための一般に最も効率的なツールです。
IDEはあなたのブラウザ上で、その要素で定義されたパラメーターと共にSeleniumのコマンドを使いユーザーの動作を記録します。
これは時間の節約だけでなく、Seleniumスクリプトのシンタックスを学ぶための優れた方法です。
Grid Selenium Grid を使用すると、さまざまなプラットフォームのさまざまなマシンでテストケースを実行できます。
テストケースの起動の制御はローカル端末で行われ、テストケースが起動されると、
リモート端末によって自動的に実行されます。
WebDriverテストの開発後、複数のブラウザーとオペレーティングシステムの組み合わせでテストを実行する必要が出てくる場合があります。
ここで Grid が登場します。
1.1 - コンポーネントを理解する WebDriverを使ってテストスイートを構築するには、多くの異なるコンポーネントを理解し、効率的に使用する必要があります。
ソフトウェアのすべてがそうであるように、人によっては同じ概念に異なる用語を使用します。
以下は、本説明での用語の使用方法の内訳です。
用語 API: アプリケーション プログラミング インターフェイス。これはWebDriverを操作するために使用する"コマンド"をまとめたものです。ライブラリ: APIとそれらを実装する必要なコードを含むコードモジュール。
ライブラリは各言語バインディング向けのものです。例 .jar
files for Java, .dll files for .NET, など.ドライバー: 実際のブラウザを制御します。
ほとんどのドライバーはブラウザベンダー自身が作成します。ドライバーは一般的にブラウザ自体を備えたシステムで実行される実行可能モジュールであり、テストスイートを実行するシステムにはありません。(ただし、それらは同じシステムであっても構いません。)注: 一部の人々はドライバーをプロキシと呼んでいます。 フレームワーク: WebDriverスイートのサポートとして使用する追加ライブラリ。これらのフレームワークは、JUnitやNUnitなどのテストフレームワークです。また、CucumberまたはRobotiumといった自然言語機能をサポートするフレームワークでもあります。フレームワークは、テスト対象のシステムの操作や構成、データ作成、テストオラクルなどに記述、利用されます。部品構成 最低限、WebDriverはドライバーを経由してブラウザーと通信します。
コミュニケーションは双方向です:WebDriverは、ドライバーを経由してブラウザーにコマンドを渡し、同じルートを経由して情報を受け取ります。
ドライバーは、ChromeDriver for GoogleのChrome/Chromium、MozillaのFirefox用GeckoDriverなどブラウザー固有のものです。
ドライバーはブラウザと同じシステムで動きます。これは、テスト自体を実行するところが同じシステムである場合とそうでない場合があります。
上記の簡単な例は 直接 通信です。ブラウザへのコミュニケーションは、Selenium ServerまたはRemoteWebDriverを経由した リモート 通信もできます。RemoteWebDriverは、ドライバーおよびブラウザと同じシステムで実行されます。
リモート通信は、ホストシステム上のドライバーと順に通信するSelenium ServerまたはSelenium Gridを使用して行うこともできます。
どのフレームワークに適しているか WebDriverには1つのジョブしかありません: 上記の任意のメソッドを経由してブラウザと通信します。WebDriverはテストに関することを知りません: WebDriverは物事を比較する方法、成功または失敗を確認する方法を知りません、そして、レポートや Given/When/Then 文法に関しても確実に知りません。
ここで、さまざまなフレームワークが登場します。
最低限必要なのは言語バインディングに一致するテストフレームワーク、例えば NUnit for .NET, JUnitfor Java, RSpec for Ruby などです。
テストフレームワークは、WebDriverおよびテストの関連手順の実行を担当します。
それは下記図に似ていると考えることができます。
上図でCucumberなどの自然言語のフレームワーク/ツールがテストフレームワークボックスの一部として存在する場合があります、またはテストフレームワークを独自の実装で完全に密閉する場合があります。
1.2 - Selenium 詳細 Seleniumは、Web ブラウザーの自動化を可能にし、 サポートするさまざまなツールとライブラリーの包括的なプロジェクトです。
Selenium 詳細 Selenium にはさまざまな機能がありますが、その核となるのは、
ブラウザーのインスタンスをリモートで制御し、
ユーザーとブラウザーのやりとりをエミュレートするために利用できる最高の技術を使用する、
Webブラウザー自動化のためのツールセットです。
Seleniumを使用すると、ユーザーはエンド ユーザーが実行する一般的なアクティビティをシミュレートできます。
フィールドにテキストを入力し、ドロップダウン値とチェック ボックスを選択し、ドキュメント内のリンクをクリックします。
また、マウスの移動、任意の JavaScript の実行など、他の多くのコントロールも提供します。
主にWebサイトのフロントエンドのテストに使用されますが、その中核として、Seleniumは、
ユーザーがブラウザーを代理で操作する ライブラリ です。
インターフェースはアプリケーションに遍在しており、目的に合わせて他のライブラリとの構成を促進します。
すべてを支配する 1 つのインターフェース プロジェクトの指針となる原則の1つは、すべての (主要な) ブラウザー テクノロジに共通のインターフェイスをサポートすることです。
Webブラウザーは非常に複雑で、高度に設計されたアプリケーションであり、
まったく異なる方法で操作を実行しますが、実行中は同じように見えることがよくあります。
テキストは同じフォントで表示されますが、画像は同じ場所に表示され、リンク先は同じです。
水面下で起こっていることは、昼と夜と同じくらい異なります。
Selenium はこれらの違いを “抽象化” し、コードを書いている人からその詳細や複雑さを隠蔽します。
これにより、数行のコードを記述して複雑なワークフローを実行できますが、
これらの同じ行は、Firefox、Internet Explorer、Chrome、およびその他のサポートされているすべてのブラウザーで実行されます。
ツールとサポート Seleniumの必要最小限な設計アプローチは、より大きなアプリケーションのコンポーネントとして含まれる汎用性を提供します。
Seleniumの包括的なプロジェクトの下で提供される周辺インフラストラクチャは、
ブラウザーのgrid をまとめるためのツールを提供し、
さまざまなブラウザーやさまざまなマシンの複数のオペレーティングシステムでテストを実行できるようにします。
サーバールームやデータセンター内の一連のコンピューターがすべて同時にブラウザーを起動して、
サイトのリンク、フォーム、テーブルにアクセスし、1日24時間アプリケーションをテストしていると想像してください。
最も一般的な言語用に提供されているシンプルなプログラミングインターフェイスを介して、
これらのテストは並行して休むことなく実行され、エラーが発生するとレポートが返されます。
ブラウザーを制御するだけでなく、そのようなgridを簡単に拡張および展開できるようにするための
ツールとドキュメントをユーザーに提供することで、これを実現するお手伝いをするのが目的です。
誰がSeleniumを利用するのか 世界で最も重要な企業の多くは、ブラウザベースのテストに Seleniumを採用しており、
多くの場合、他の独自ツールを使用した長年にわたる取り組みに取って代わりました。
人気が高まるにつれて、その要件と課題も倍増しています。
ウェブがより複雑になり、新しいテクノロジーがウェブサイトに追加されるにつれて、
可能な限りそれらに遅れずについていくことがこのプロジェクトの使命です。
オープンソースプロジェクトであるため、このサポートは多くのボランティアからの惜しみない時間の寄付によって提供されます。
このプロジェクトのもう1つの使命は、より多くのボランティアがこの取り組みに参加することを奨励し、
強力なコミュニティを構築して、プロジェクトが新しいテクノロジに対応し続け、
機能テスト自動化の主要なプラットフォームであり続けることができるようにすることです。
2 - WebDriver WebDriverはブラウザをネイティブに操作します。詳細については、こちらをご覧ください。
WebDriverは、ユーザーがローカルまたはSeleniumサーバーを使用するリモートマシンで行うように、ブラウザをネイティブに動かし、ブラウザの自動化に関して大きく前進します。
Selenium WebDriverは言語バインディングと個々のブラウザ制御コードの実装の両方を参照します。 これは通常、単に WebDriver と呼ばれます。
Selenium WebDriverは、W3C勧告 です。
2.1 - 入門 Seleniumを初めて使用する場合は、すぐに習得するのに役立つリソースがいくつかあります。
Seleniumは市場で主要なブラウザの全てを WebDriver を使うことでサポートしています。
WebDriverとはAPI群とプロトコルです。これらはウェブブラウザの動作をコントロールするための言語中立なインターフェイスを定義しています。
それぞれのブラウザは特定のWebDriverの実装を持っており、これらは driver と呼ばれます。
driverはブラウザに委譲する責務を持つコンポーネントであり、Seleniumとブラウザ間の通信を処理します。
この分離は、ブラウザベンダーに自分たちのブラウザでの実装の責任を持たせるための意図的な努力のひとつです。
Seleniumは可能な場合これらのサードパーティ製のdriverを使いますが、それが現実的でない場合のためにプロジェクトでメンテナンスしているdriverも提供しています。
Seleniumフレームワークはこれら全ての要素をユーザ向けのインターフェイスを通して結びつけます。このインターフェイスは異なるブラウザバックエンドを透過的に使えるようにし、クロスブラウザ・クロスプラットフォームの自動化を可能にします。
Selenium setup is quite different from the setup of other commercial tools.
Before you can start writing Selenium code, you have to
install the language bindings libraries for your language of choice, the browser you
want to use, and the driver for that browser.
Follow the links below to get up and going with Selenium WebDriver.
If you wish to start with a low-code/record and playback tool, please check
Selenium IDE
Once you get things working, if you want to scale up your tests, check out the
Selenium Grid .
2.1.1 - Seleniumライブラリのインストール お気に入りのプログラミング言語用にSeleniumライブラリを設定します。
最初にあなたの自動化プロジェクトにSeleniumのバインディングをインストールする必要があります。
インストールの方法は選択した言語によって異なります。
Requirements by language
Java
Python
CSharp
Ruby
JavaScript
Kotlin View the minimum supported Java version here .
Installation of Selenium libraries for Java is accomplished using a build tool.
Maven Specify the dependencies in the project’s pom.xml
file:
<dependency>
<groupId> org.seleniumhq.selenium</groupId>
<artifactId> selenium-java</artifactId>
<version> ${selenium.version}</version>
</dependency>
Gradle Specify the dependency in the project build.gradle
file as testImplementation
:
testImplementation 'org.seleniumhq.selenium:selenium-java:4.24.0'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:5.11.0'
The minimum supported Python version for each Selenium version can be found
in Supported Python Versions
on PyPi
There are a couple different ways to install Selenium.
Pip Download Alternatively you can download the PyPI source archive
(selenium-x.x.x.tar.gz) and install it using setup.py :
Require in project To use it in a project, add it to the requirements.txt
file:
A list of all supported frameworks for each version of Selenium
is available on Nuget
There are a few options for installing Selenium.
Packet Manager Install-Package Selenium.WebDriver
.NET CLI dotnet add package Selenium.WebDriver
CSProj in the project’s csproj
file, specify the dependency as a PackageReference
in ItemGroup
:
<PackageReference Include= "Selenium.WebDriver" Version= "4.24.0" />
Additional considerations Further items of note for using Visual Studio Code (vscode) and C#
Install the compatible .NET SDK as per the section above.
Also install the vscode extensions (Ctrl-Shift-X) for C# and NuGet.
Follow the instruction here
to create and run the “Hello World” console project using C#.
You may also create a NUnit starter project using the command line dotnet new NUnit
.
Make sure the file %appdata%\NuGet\nuget.config
is configured properly as some developers reported that it will be empty due to some issues.
If nuget.config
is empty, or not configured properly, then .NET builds will fail for Selenium Projects.
Add the following section to the file nuget.config
if it is empty:
<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>
...
For more info about nuget.config
click here .
You may have to customize nuget.config
to meet you needs.
Now, go back to vscode, press Ctrl-Shift-P, and type “NuGet Add Package”, and enter the required Selenium packages such as Selenium.WebDriver
.
Press Enter and select the version.
Now you can use the examples in the documentation related to C# with vscode.
You can see the minimum required version of Ruby for any given Selenium version
on rubygems.org
Selenium can be installed two different ways.
Install manually gem install selenium-webdriver
Add to project’s gemfile gem 'selenium-devtools' , '= 0.128.0'
You can find the minimum required version of Node for any given version of Selenium in the
Node Support Policy
section on npmjs
Selenium is typically installed using npm.
Install locally npm install selenium-webdriver
Add to project In your project’s package.json
, add requirement to dependencies
:
Use the Java bindings for Kotlin.
Next Step Create your first Selenium script
2.1.2 - 最初のSeleniumスクリプトを書く Seleniumスクリプトを作成するための段階的な説明
Seleniumをインストール し、
すると、Seleniumコードを書く準備が整います。
Eight Basic Components Seleniumが行うことはすべて、ブラウザコマンドを送信して、何かを実行したり、情報の要求を送信したりすることです。
Seleniumで行うことのほとんどは、次の基本的なコマンドの組み合わせです。
Click on the link to “View full example on GitHub” to see the code in context.
1. ドライバーインスタンスでセッションを開始します For more details on starting a session read our documentation on 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 In this example we are ブラウザがナビゲート するコマンドを送信します
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" )
There are a bunch of types of information about the browser you
can request, including window handles, browser size / position, cookies, alerts, etc.
Java
Python
CSharp
Ruby
JavaScript
Kotlin var title = driver . Title ;
let title = await driver . getTitle ();
4. Establish Waiting Strategy Synchronizing the code with the current state of the browser is one of the biggest challenges
with Selenium, and doing it well is an advanced topic.
Essentially you want to make sure that the element is on the page before you attempt to locate it
and the element is in an interactable state before you attempt to interact with it.
An implicit wait is rarely the best solution, but it’s the easiest to demonstrate here, so
we’ll use it as a placeholder.
Read more about Waiting strategies .
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. 要素を検索する ためのコマンドを送信します The majority of commands in most Selenium sessions are element related, and you can’t interact
with one without first finding an element
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. 要素に対してアクションを実行する There are only a handful of actions to take on an element ,
but you will use them frequently.
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. 要素に関する情報をリクエストします Elements store a lot of information that can be requested .
Java
Python
CSharp
Ruby
JavaScript
Kotlin var value = message . Text ;
let value = await message . getText ();
val value = message . getText ()
8. セッションを終了します This ends the driver process, which by default closes the browser as well.
No more commands can be sent to this driver instance.
See Quitting Sessions .
Java
Python
CSharp
Ruby
JavaScript
Kotlin Running Selenium File
Java
Python
CSharp
Ruby
JavaScript
Kotlin mvn exec:java -D"exec.mainClass"="dev.selenium.getting_started.FirstScript" -D"exec.classpathScope"=test
node example_script.spec.js
Next Steps Most Selenium users execute many sessions and need to organize them to minimize duplication and keep the code
more maintainable. Read on to learn about how to put this code into context for your use case with
Using Selenium .
2.1.3 - Organizing and Executing Selenium Code Scaling Selenium execution with an IDE and a Test Runner library
If you want to run more than a handful of one-off scripts, you need to
be able to organize and work with your code. This page should give you
ideas for how to actually do productive things with your Selenium code.
Common Uses Most people use Selenium to execute automated tests for web applications,
but Selenium support any use case of browser automation.
Repetitive Tasks Perhaps you need to log into a website and download something, or submit a form.
You can create a Selenium script to run with a service at preset times.
Web Scraping Are you looking to collect data from a site that doesn’t have an API? Selenium
will let you do this, but please make sure you are familiar with the website’s
terms of service as some websites do not permit it and others will even block Selenium.
Testing Running Selenium for testing requires making assertions on actions taken by Selenium.
So a good assertion library is required. Additional features to provide structure for tests
require use of Test Runner .
IDEs Regardless of how you use Selenium code,
you won’t be very effective writing or executing it without a good
Integrated Developer Environment. Here are some common options…
Test Runner Even if you aren’t using Selenium for testing, if you have advanced use cases, it might make
sense to use a test runner to better organize your code. Being able to use before/after hooks
and run things in groups or in parallel can be very useful.
Choosing There are many different test runners available.
All the code examples in this documentation can be found in (or is being moved to) our
example directories that use test runners and get executed every release to ensure all the code is correct and updated.
Here is a list of test runners with links. The first item is the one that is used by this repository and the one
that will be used for all examples on this page.
Java
Python
CSharp
Ruby
JavaScript
Kotlin JUnit - A widely-used testing framework for Java-based Selenium tests.TestNG - Offers extra features like parallel test execution and parameterized tests.pytest - A preferred choice for many, thanks to its simplicity and powerful plugins.unittest - Python’s standard library testing framework.NUnit - A popular unit-testing framework for .NET.MS Test - Microsoft’s own unit testing framework.RSpec - The most widely used testing library for running Selenium tests in Ruby.Minitest - A lightweight testing framework that comes with Ruby standard library.Jest - Primarily known as a testing framework for React, it can also be used for Selenium tests.Mocha - The most common JS library for running Selenium tests.
Installing This is very similar to what was required in Install a Selenium Library .
This code is only showing examples for what is being used in our Documentation Examples project.
Java
Python
CSharp
Ruby
JavaScript
Kotlin To use it in a project, add it to the requirements.txt
file:
in the project’s csproj
file, specify the dependency as a PackageReference
in ItemGroup
:
In your project’s package.json
, add requirement to dependencies
:
Asserting
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 );
Setting Up and Tearing Down
Java
Python
CSharp
Ruby
JavaScript
Kotlin Set Up @BeforeEach
public void setup () {
driver = new ChromeDriver ();
}
Tear Down @AfterEach
public void teardown () {
driver . quit ();
}
Set Up def setup ():
driver = webdriver . Chrome ()
driver . get ( "https://www.selenium.dev/selenium/web/web-form.html" )
return driver
Tear Down def teardown ( driver ):
driver . quit ()
Set Up before do
@driver = Selenium :: WebDriver . for :chrome
end
Tear Down config . after { @driver &. quit }
### Set Up
before ( async function () {
driver = await new Builder (). forBrowser ( 'chrome' ). build ();
});
### Tear Down
after ( async () => await driver . quit ());
Executing
Java
Python
CSharp
Ruby
JavaScript
Kotlin Mocha mocha runningTests.spec.js
npx npx mocha runningTests.spec.js
Examples In First script , we saw each of the components of a Selenium script.
Here’s an example of that code using a test runner:
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 ());
});
Next Steps Take what you’ve learned and build out your Selenium code!
As you find more functionality that you need, read up on the rest of our
WebDriver documentation .
2.2 - ドライバーセッション セッションの開始と停止は、ブラウザーを開いたり閉じたりするためのものです。
セッションの作成 新しいセッションの作成は、W3C コマンド New session に対応しています。
セッションは、新しいDriverクラスオブジェクトを初期化することによって自動的に作成されます。
各言語では、次のいずれかのクラス (または同等のもの) の引数を使用してセッションを作成することができます。
ローカルドライバー ローカルドライバーを起動するための主な一意の引数には、ローカルコンピューターで必要なドライバーサービスを起動するための情報が含まれます。
Service オブジェクトはローカルドライバーにのみ適用され、ブラウザーのドライバーに関する情報を提供します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver = webdriver . Chrome ( options = options )
driver = Selenium :: WebDriver . for :chrome , options : options
リモートドライバー リモートドライバーを起動するための主な一意の引数には、コードを実行する場所に関する情報を含みます。
詳細は、リモートドライバー をご覧ください。
セッションの終了 セッションの終了に対するW3Cコマンドは、セッションの削除 です。
重要: quit
メソッドは close
メソッドとは異なり、
セッションを終了するには常に quit
を使用することをお勧めします。
Java
Python
CSharp
Ruby
JavaScript
Kotlin {< gh-codeblock path="examples/java/src/test/java/dev/selenium/getting_started/FirstScript.java#L29" >}
{< gh-codeblock path="examples/dotnet/HelloSelenium.cs#L13" >}
{< gh-codeblock path="examples/javascript/test/getting_started/firstScript.spec.js#L28" >}
{< gh-codeblock path="examples/kotlin/src/test/kotlin/dev/selenium/getting_started/FirstScriptTest.kt#L35" >}
2.2.1 - ブラウザーオプション これらのCapabilityはすべてのブラウザで共通です。
Selenium 3 では、Capabilitiesは Desired Capabilities クラスを使用してセッションで定義していました。
Selenium 4 以降、ブラウザ オプション クラスを使用する必要があります。
リモート ドライバー セッションの場合、使用するブラウザーを決めるため、ブラウザーオプションインスタンスが必要です。
これらのオプションは、Capabilities の w3c仕様で説明しています。
各ブラウザには、w3c仕様で定義しているものに加えて定義可能な カスタム オプション があります。
browserName Browser name is set by default when using an Options class instance.
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
String name = chromeOptions . getBrowserName ();
options = webdriver . ChromeOptions ()
options = Selenium :: WebDriver :: Options . chrome
browserVersion This capability is optional, this is used to set the available browser version at remote end.
In recent versions of Selenium, if the version is not found on the system,
it will be automatically downloaded by Selenium Manager
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeOptions chromeOptions = new ChromeOptions ();
String version = "latest" ;
chromeOptions . setBrowserVersion ( version );
options . browser_version = '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 . 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 . 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 . 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 . platform_name = 'any'
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 . 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 . 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 . 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 . 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 . 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 . 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 . 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 . 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.2 - HTTP Client Configuration These allow you to set various parameters for the HTTP library
Java
Python
CSharp
Ruby
JavaScript
Kotlin client = Selenium :: WebDriver :: Remote :: Http :: Default . new ( open_timeout : 30 , read_timeout : 30 )
expect ( client . open_timeout ) . to eq 30
2.2.3 - Driver Service Class The Service classes are for managing the starting and stopping of drivers.
They can not be used with a Remote WebDriver session.
Service classes allow you to specify information about the driver,
like location and which port to use.
They also let you specify what arguments get passed
to the command line. Most of the useful arguments are related to logging.
Default Service instance To start a driver with a default service instance:
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
Driver location Note: If you are using Selenium 4.6 or greater, you shouldn’t need to set a driver location.
If you can not update Selenium or have an advanced use case here is how to specify the driver location:
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
Driver port If you want the driver to run on a specific port, you may specify it as follows:
Java
Python
CSharp
Ruby
JavaScript
Kotlin ChromeDriverService service = new ChromeDriverService . Builder (). usingPort ( 1234 ). build ();
Selenium v4.11
service = webdriver . ChromeService ( port = 1234 )
Logging Logging functionality varies between browsers. Most browsers allow you to
specify location and level of logs. Take a look at the respective browser page:
2.2.4 - Remote WebDriver Selenium lets you automate browsers on remote computers if
there is a Selenium Grid running on them. The computer that
executes the code is referred to as the client computer, and the computer with the browser and driver is
referred to as the remote computer or sometimes as an end-node.
To direct Selenium tests to the remote computer, you need to use a Remote WebDriver class
and pass the URL including the port of the grid on that machine. Please see the grid documentation
for all the various ways the grid can be configured.
Basic Example The driver needs to know where to send commands to and which browser to start on the Remote computer. So an address
and an options instance are both required.
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
Uploads Uploading a file is more complicated for Remote WebDriver sessions because the file you want to
upload is likely on the computer executing the code, but the driver on the
remote computer is looking for the provided path on its local file system.
The solution is to use a Local File Detector. When one is set, Selenium will bundle
the file, and send it to the remote machine, so the driver can see the reference to it.
Some bindings include a basic local file detector by default, and all of them allow
for a custom file detector.
Java
Python
CSharp
Ruby
JavaScript
Kotlin Java does not include a Local File Detector by default, so you must always add one to do uploads.
(( 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 adds a local file detector to remote webdriver instances by default, but you can also create your own class.
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 adds a local file detector to remote webdriver instances by default, but you can also create your own class.
(( 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 adds a local file detector to remote webdriver instances by default, but you can also create your own lambda:
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
Downloads Chrome, Edge and Firefox each allow you to set the location of the download directory.
When you do this on a remote computer, though, the location is on the remote computer’s local file system.
Selenium allows you to enable downloads to get these files onto the client computer.
Enable Downloads in the Grid Regardless of the client, when starting the grid in node or standalone mode,
you must add the flag:
--enable-managed-downloads true
Enable Downloads in the Client The grid uses the se:downloadsEnabled
capability to toggle whether to be responsible for managing the browser location.
Each of the bindings have a method in the options class to set this.
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
List Downloadable Files Be aware that Selenium is not waiting for files to finish downloading,
so the list is an immediate snapshot of what file names are currently in the directory for the given session.
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
Download a File Selenium looks for the name of the provided file in the list and downloads it to the provided target directory.
Java
Python
CSharp
Ruby
JavaScript
Kotlin (( HasDownloads ) driver ). downloadFile ( downloadableFile , targetDirectory );
driver . download_file ( downloadable_file , target_directory )
driver . download_file ( downloadable_file , target_directory )
Delete Downloaded Files By default, the download directory is deleted at the end of the applicable session,
but you can also delete all files during the session.
Java
Python
CSharp
Ruby
JavaScript
Kotlin (( HasDownloads ) driver ). deleteDownloadableFiles ();
driver . delete_downloadable_files ()
(( RemoteWebDriver ) driver ). DeleteDownloadableFiles ();
driver . delete_downloadable_files
Browser specific functionalities Each browser has implemented special functionality that is available only to that browser.
Each of the Selenium bindings has implemented a different way to use those features in a Remote Session
Java
Python
CSharp
Ruby
JavaScript
Kotlin Java requires you to use the Augmenter class, which allows it to automatically pull in implementations for
all interfaces that match the capabilities used with the RemoteWebDriver
driver = new Augmenter (). augment ( driver );
Of interest, using the RemoteWebDriverBuilder
automatically augments the driver, so it is a great way
to get all the functionality by default:
RemoteWebDriver . builder ()
. address ( gridUrl )
. oneOf ( new ChromeOptions ())
. setCapability ( "ext:options" , Map . of ( "key" , "value" ))
. config ( ClientConfig . defaultConfig ())
. build ();
.NET uses a custom command executor for executing commands that are valid for the given browser in the remote driver.
var customCommandDriver = driver as ICustomDriverCommandExecutor ;
customCommandDriver . RegisterCustomDriverCommands ( FirefoxDriver . CustomCommandDefinitions );
var screenshotResponse = customCommandDriver
. ExecuteCustomDriverCommand ( FirefoxDriver . GetFullPageScreenshotCommand , null );
Ruby uses mixins to add applicable browser specific methods to the Remote WebDriver session;
the methods should always just work for you.
クライアントのリクエストをトレースする この機能は、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を参照してください。
2.3 - 対応ブラウザ 各ブラウザには、カスタムCapabilityと固有の機能があります。
2.3.1 - Chrome固有の機能 これらは、Google Chrome ブラウザに固有のCapabilityです。
デフォルトでは、Selenium 4 は Chrome v75 以降と互換性があります。
Chromeブラウザのバージョンと chromedriverのバージョンは、メジャーバージョンと一致する必要があることに注意してください。
Options 全てのブラウザに共通のCapabilityについては、オプション ページ で説明しています。
Chrome に固有のCapabilityは、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
. forBrowser ( Browser . CHROME )
. setChromeOptions ( Options )
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
さまざまなCapabilityを備えた一般的な使用例をいくつか示します。
引数 The args
parameter is for a list of command line switches to be used when starting the browser.
There are two excellent resources for investigating these arguments:
Commonly used args include --start-maximized
, --headless=new
and --user-data-dir=...
Add an argument to options:
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . addArguments ( "--start-maximized" );
options . add_argument ( "--start-maximized" )
options . AddArgument ( "--start-maximized" );
options . args << '--start-maximized'
. setChromeOptions ( options . addArguments ( '--headless=new' ))
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
指定したロケーションでブラウザを起動する binary
パラメーターは、使用するブラウザの別のロケーションのパスを取ります。
このパラメーターを使用すると、chromedriver を使用して、さまざまな Chromium ベースのブラウザを駆動できます。
オプションにブラウザのロケーションを追加します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . setBinary ( getChromeLocation ());
options . binary_location = chrome_bin
options . BinaryLocation = GetChromeLocation ();
options . binary = chrome_location
. setChromeOptions ( options . setChromeBinaryPath ( `Path to chrome binary` ))
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
拡張機能を追加する extensions
パラメーターはcrxファイルを受け入れます
The extensions
parameter accepts crx files. As for unpacked directories,
please use the load-extension
argument instead, as mentioned in
this post .
オプションに拡張機能を追加します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . addExtensions ( extensionFilePath );
options . add_extension ( extension_file_path )
options . AddExtension ( extensionFilePath );
options . add_extension ( extension_file_path )
. forBrowser ( Browser . CHROME )
. setChromeOptions ( options . addExtensions ([ './test/resources/extensions/webextensions-selenium-example.crx' ]))
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
ブラウザを開いたままにする detach
パラメータをtrueに設定すると、ドライバープロセスが終了した後もブラウザを開いたままにできます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin Note : This is already the default behavior in Java.
options . add_experimental_option ( "detach" , True )
Note : This is already the default behavior in .NET.
. setChromeOptions ( options . detachDriver ( true ))
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
引数を除外する Chrome はさまざまな引数を追加します。
これらの引数を追加したくない場合は、それらを excludeSwitches
に渡します。
一般的な例は、ポップアップブロッカーをオンに設定することです。
A full list of default arguments
can be parsed from the
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'
. setChromeOptions ( options . excludeSwitches ( 'enable-automation' ))
. build ();
await driver . get ( 'https://www.selenium.dev/selenium/web/blank.html' );
Service Examples for creating a default Service object, and for setting driver location and port
can be found on the Driver Service page.
Log output Getting driver logs can be helpful for debugging 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 ChromeDriverService service =
new ChromeDriverService . Builder (). withLogFile ( logLocation ). build ();
Note : Java also allows setting file output by System Property: Property key: ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY
Property value: String representing path to log file
Selenium v4.11
service = webdriver . ChromeService ( log_output = log_path )
service . LogPath = GetLogLocation ();
Console output To change the logging output to display in the console as STDOUT:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
ChromeDriverService service =
new ChromeDriverService . Builder (). withLogOutput ( System . out ). build ();
Note : Java also allows setting console output by System Property; Property key: ChromeDriverService.CHROME_DRIVER_LOG_PROPERTY
Property value: DriverService.LOG_STDOUT
or DriverService.LOG_STDERR
Selenium v4.11
service = webdriver . ChromeService ( log_output = subprocess . STDOUT )
$stdout
and $stderr
are both valid values
Selenium v4.10
Log level There are 6 available log levels: ALL
, DEBUG
, INFO
, WARNING
, SEVERE
, and OFF
.
Note that --verbose
is equivalent to --log-level=ALL
and --silent
is equivalent to --log-level=OFF
,
so this example is just setting the log level generically:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
ChromeDriverService service =
new ChromeDriverService . Builder (). withLogLevel ( ChromiumDriverLogLevel . DEBUG ). build ();
Note : Java also allows setting log level by System Property: Property key: ChromeDriverService.CHROME_DRIVER_LOG_LEVEL_PROPERTY
Property value: String representation of ChromiumDriverLogLevel
enum
Selenium v4.11
service = webdriver . ChromeService ( service_args = [ '--log-level=DEBUG' ], log_output = subprocess . STDOUT )
Selenium v4.10
service . args << '--log-level=DEBUG'
Log file features There are 2 features that are only available when logging to a file:
append log readable timestamps To use them, you need to also explicitly specify the log path and log level.
The log output will be managed by the driver, not the process, so minor differences may be seen.
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
ChromeDriverService service =
new ChromeDriverService . Builder (). withAppendLog ( true ). withReadableTimestamp ( true ). build ();
Note : Java also allows toggling these features by System Property: Property keys: ChromeDriverService.CHROME_DRIVER_APPEND_LOG_PROPERTY
and ChromeDriverService.CHROME_DRIVER_READABLE_TIMESTAMP
Property value: "true"
or "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'
Disabling build check Chromedriver and Chrome browser versions should match, and if they don’t the driver will error.
If you disable the build check, you can force the driver to be used with any version of Chrome.
Note that this is an unsupported feature, and bugs will not be investigated.
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
ChromeDriverService service =
new ChromeDriverService . Builder (). withBuildCheckDisabled ( true ). build ();
Note : Java also allows disabling build checks by System Property: Property key: ChromeDriverService.CHROME_DRIVER_DISABLE_BUILD_CHECK
Property value: "true"
or "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'
Special Features キャスティング タブの共有など、Chrome Castデバイスを操作できます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin 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
ネットワークの状態 さまざまなネットワークの状態をシミュレートできます。
The following examples are for local webdrivers. For remote webdrivers,
please refer to the
Remote WebDriver page.
Java
Python
CSharp
Ruby
JavaScript
Kotlin @driver . network_conditions = { offline : false , latency : 100 , throughput : 200 }
ログ
Java
Python
CSharp
Ruby
JavaScript
Kotlin logs = @driver . logs . get ( :browser )
パーミッション
Java
Python
CSharp
Ruby
JavaScript
Kotlin @driver . add_permission ( 'camera' , 'denied' )
@driver . add_permissions ( 'clipboard-read' => 'denied' , 'clipboard-write' => 'prompt' )
デベロッパー ツール Chromeデベロッパーツールの使用に関する詳細については、[Chromeデベロッパー ツール] セクションを参照してください。
2.3.2 - Edge固有の機能 これらは、Microsoft Edgeブラウザに固有のCapabilityです。
Microsoft EdgeはChromiumで実装されており、サポートされている最も古いバージョンはv79です。
Chromeと同様に、edgedriverのメジャー バージョン番号は、Edgeブラウザのメジャーバージョンと一致する必要があります。
Chromeページ にあるすべての機能とオプションは、Edgeでも機能します。
オプション Capabilities common to all browsers are described on the Options page .
Capabilities unique to Chromium are documented at Google’s page for
Capabilities & ChromeOptions
基本的な定義済みオプションを使用して Edgeセッションを開始すると、次のようになります。
Java
Python
CSharp
Ruby
JavaScript
Kotlin EdgeOptions options = new EdgeOptions ();
driver = new EdgeDriver ( options );
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
. forBrowser ( Browser . EDGE )
. setEdgeOptions ( options )
. build ();
});
引数 The args
parameter is for a list of command line switches to be used when starting the browser.
There are two excellent resources for investigating these arguments:
一般的に使用される引数には、--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'
Start browser in a specified location The binary
parameter takes the path of an alternate location of browser to use. With this parameter you can
use chromedriver to drive various Chromium based browsers.
Add a browser location to options:
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . setBinary ( getEdgeLocation ());
options . binary_location = edge_bin
options . BinaryLocation = GetEdgeLocation ();
options . binary = edge_location
Add extensions The extensions
parameter accepts crx files. As for unpacked directories,
please use the load-extension
argument instead, as mentioned in
this post .
Add an extension to options:
Java
Python
CSharp
Ruby
JavaScript
Kotlin options . addExtensions ( extensionFilePath );
options . add_extension ( extension_file_path )
options . AddExtension ( extensionFilePath );
options . add_extension ( extension_file_path )
Keeping browser open Setting the detach
parameter to true will keep the browser open after the process has ended,
so long as the quit command is not sent to the driver.
Java
Python
CSharp
Ruby
JavaScript
Kotlin Note : This is already the default behavior in Java.
options . add_experimental_option ( "detach" , True )
Note : This is already the default behavior in .NET.
Excluding arguments MSEdgedriver has several default arguments it uses to start the browser.
If you do not want those arguments added, pass them into excludeSwitches
.
A common example is to turn the popup blocker back on. A full list of default arguments
can be parsed from the
Chromium Source Code
Set excluded arguments on options:
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'
Service Examples for creating a default Service object, and for setting driver location and port
can be found on the Driver Service page.
Log output Getting driver logs can be helpful for debugging 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
EdgeDriverService service = new EdgeDriverService . Builder (). withLogFile ( logLocation ). build ();
Note : Java also allows setting file output by System Property: Property key: EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY
Property value: String representing path to log file
service = webdriver . EdgeService ( log_output = log_path )
service . LogPath = GetLogLocation ();
Console output To change the logging output to display in the console as STDOUT:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
EdgeDriverService service = new EdgeDriverService . Builder (). withLogOutput ( System . out ). build ();
Note : Java also allows setting console output by System Property; Property key: EdgeDriverService.EDGE_DRIVER_LOG_PROPERTY
Property value: DriverService.LOG_STDOUT
or DriverService.LOG_STDERR
$stdout
and $stderr
are both valid values
Selenium v4.10
Log level There are 6 available log levels: ALL
, DEBUG
, INFO
, WARNING
, SEVERE
, and OFF
.
Note that --verbose
is equivalent to --log-level=ALL
and --silent
is equivalent to --log-level=OFF
,
so this example is just setting the log level generically:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
EdgeDriverService service =
new EdgeDriverService . Builder (). withLoglevel ( ChromiumDriverLogLevel . DEBUG ). build ();
Note : Java also allows setting log level by System Property: Property key: EdgeDriverService.EDGE_DRIVER_LOG_LEVEL_PROPERTY
Property value: String representation of ChromiumDriverLogLevel
enum
service = webdriver . EdgeService ( service_args = [ '--log-level=DEBUG' ], log_output = log_path )
Selenium v4.10
service . args << '--log-level=DEBUG'
Log file features There are 2 features that are only available when logging to a file:
append log readable timestamps To use them, you need to also explicitly specify the log path and log level.
The log output will be managed by the driver, not the process, so minor differences may be seen.
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
EdgeDriverService service =
new EdgeDriverService . Builder (). withAppendLog ( true ). withReadableTimestamp ( true ). build ();
Note : Java also allows toggling these features by System Property: Property keys: EdgeDriverService.EDGE_DRIVER_APPEND_LOG_PROPERTY
and EdgeDriverService.EDGE_DRIVER_READABLE_TIMESTAMP
Property value: "true"
or "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'
Disabling build check Edge browser and msedgedriver versions should match, and if they don’t the driver will error.
If you disable the build check, you can force the driver to be used with any version of Edge.
Note that this is an unsupported feature, and bugs will not be investigated.
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.8
EdgeDriverService service =
new EdgeDriverService . Builder (). withBuildCheckDisabled ( true ). build ();
Note : Java also allows disabling build checks by System Property: Property key: EdgeDriverService.EDGE_DRIVER_DISABLE_BUILD_CHECK
Property value: "true"
or "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ページ を参照してください。
Special Features Some browsers have implemented additional features that are unique to them.
Casting You can drive Chrome Cast devices with Edge, including sharing tabs
Java
Python
CSharp
Ruby
JavaScript
Kotlin 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
Network conditions You can simulate various network conditions.
Java
Python
CSharp
Ruby
JavaScript
Kotlin @driver . network_conditions = { offline : false , latency : 100 , throughput : 200 }
Logs
Java
Python
CSharp
Ruby
JavaScript
Kotlin logs = @driver . logs . get ( :browser )
Permissions
Java
Python
CSharp
Ruby
JavaScript
Kotlin @driver . add_permission ( 'camera' , 'denied' )
@driver . add_permissions ( 'clipboard-read' => 'denied' , 'clipboard-write' => 'prompt' )
See the [Chrome DevTools] section for more information about using DevTools in Edge
2.3.3 - Firefox 固有のCapability Mozilla Firefox ブラウザーに固有のCapabilityです。
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' ))
. build ();
指定したロケーションでブラウザを起動する 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 ();
options . setProfile ( profile );
driver = new RemoteWebDriver ( 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
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 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 FirefoxDriverService service =
new GeckoDriverService . Builder (). withLogFile ( logLocation ). build ();
Note : Java also allows setting file output by System Property: Property key: GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY
Property value: String representing path to log file
Selenium v4.11
service = webdriver . FirefoxService ( log_output = log_path , service_args = [ '--log' , 'debug' ])
Console output To change the logging output to display in the console:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
FirefoxDriverService service =
new GeckoDriverService . Builder (). withLogOutput ( System . out ). build ();
Note : Java also allows setting console output by System Property; Property key: GeckoDriverService.GECKO_DRIVER_LOG_PROPERTY
Property value: DriverService.LOG_STDOUT
or DriverService.LOG_STDERR
Selenium v4.11
service = webdriver . FirefoxService ( log_output = subprocess . STDOUT )
Log level There are 7 available log levels: fatal
, error
, warn
, info
, config
, debug
, trace
.
If logging is specified the level defaults to info
.
Note that -v
is equivalent to -log debug
and -vv
is equivalent to log trace
,
so this examples is just for setting the log level generically:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
FirefoxDriverService service =
new GeckoDriverService . Builder (). withLogLevel ( FirefoxDriverLogLevel . DEBUG ). build ();
Note : Java also allows setting log level by System Property: Property key: GeckoDriverService.GECKO_DRIVER_LOG_LEVEL_PROPERTY
Property value: String representation of FirefoxDriverLogLevel
enum
Selenium v4.11
service = webdriver . FirefoxService ( log_output = log_path , service_args = [ '--log' , 'debug' ])
Selenium v4.10
service . args += %w[--log debug]
Truncated Logs The driver logs everything that gets sent to it, including string representations of large binaries, so
Firefox truncates lines by default. To turn off truncation:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
FirefoxDriverService service =
new GeckoDriverService . Builder (). withTruncatedLogs ( false ). build ();
Note : Java also allows setting log level by System Property: Property key: GeckoDriverService.GECKO_DRIVER_LOG_NO_TRUNCATE
Property value: "true"
or "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'
Profile Root The default directory for profiles is the system temporary directory. If you do not have access to that directory,
or want profiles to be created some place specific, you can change the profile root directory:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
FirefoxDriverService service =
new GeckoDriverService . Builder (). withProfileRoot ( profileDirectory ). build ();
Note : Java also allows setting log level by System Property: Property key: GeckoDriverService.GECKO_DRIVER_PROFILE_ROOT
Property value: String representing path to profile root directory
service = webdriver . FirefoxService ( service_args = [ '--profile-root' , temp_dir ])
Selenium v4.8
service . args += [ '--profile-root' , root_directory ]
Special Features アドオン Chromeとは異なり、Firefoxの拡張機能はCapabilityの一部として追加されるのではなく、ドライバーの起動後に作成されます。
Unlike Chrome, Firefox extensions are not added as part of capabilities as mentioned in
this issue ,
they are created after starting the driver.
The following examples are for local webdrivers. For remote webdrivers,
please refer to the
Remote WebDriver page.
インストール Mozilla Add-Onsページ から取得する署名付きxpiファイル
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver . install_addon ( addon_path_xpi )
driver . InstallAddOnFromFile ( Path . GetFullPath ( extensionFilePath ));
driver . install_addon ( extension_file_path )
let driver = new Builder ()
. forBrowser ( Browser . FIREFOX )
. build ()
アンインストール アドオンをアンインストールするには、そのIDを知る必要があります。
IDはアドオンインストール時の戻り値から取得できます。
Java
Python
CSharp
Ruby
JavaScript
Kotlin String id = driver . installExtension ( xpiPath );
driver . uninstall_addon ( id )
Selenium v4.5
driver . UninstallAddOn ( extensionId );
driver . uninstall_addon ( extension_id )
let id = await driver . installAddon ( xpiPath );
署名なしのインストール 未完成または未公開の拡張機能を使用する場合、署名されていない可能性があります。
そのため、“一時的なもの” としてのみインストールできます。
これは、zipファイルまたはディレクトリを渡すことで実行できます。ディレクトリの例を次に示します。
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver = startFirefoxDriver ();
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 )
const xpiPath = path . resolve ( './test/resources/extensions/selenium-example' )
let driver = new Builder ()
ページ全体のスクリーンショット The following examples are for local webdrivers. For remote webdrivers,
please refer to the
Remote WebDriver page.
Java
Python
CSharp
Ruby
JavaScript
Kotlin screenshot = driver . save_full_page_screenshot ( File . join ( dir , 'screenshot.png' ))
コンテキスト The following examples are for local webdrivers. For remote webdrivers,
please refer to the
Remote WebDriver page.
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver . context = 'content'
2.3.4 - IE specific functionality These are capabilities and features specific to Microsoft Internet Explorer browsers.
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 ())
Note : Java also allows setting file output by System Property: Property key: InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY
Property value: String representing path to log file
service = webdriver . IeService ( log_output = log_path , log_level = 'INFO' )
Console output To change the logging output to display in the console as STDOUT:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
. withLogOutput ( System . out )
Note : Java also allows setting console output by System Property; Property key: InternetExplorerDriverService.IE_DRIVER_LOGFILE_PROPERTY
Property value: DriverService.LOG_STDOUT
or DriverService.LOG_STDERR
Selenium v4.11
service = webdriver . IeService ( log_output = subprocess . STDOUT )
Log Level There are 6 available log levels: FATAL
, ERROR
, WARN
, INFO
, DEBUG
, and TRACE
If logging output is specified, the default level is FATAL
Java
Python
CSharp
Ruby
JavaScript
Kotlin . withLogLevel ( InternetExplorerDriverLogLevel . WARN )
Note : Java also allows setting log level by System Property: Property key: InternetExplorerDriverService.IE_DRIVER_LOGLEVEL_PROPERTY
Property value: String representation of InternetExplorerDriverLogLevel.DEBUG.toString()
enum
service = webdriver . IeService ( log_output = log_path , log_level = 'WARN' )
Selenium v4.10
service . args << '-log-level=WARN'
Supporting Files Path
Java
Python
CSharp
Ruby
JavaScript
Kotlin . withExtractPath ( getTempDirectory ())
**Note**: Java also allows setting log level by System Property:\
Property key: `InternetExplorerDriverService.IE_DRIVER_EXTRACT_PATH_PROPERTY`\
Property value: String representing path to supporting files directory
Selenium v4.11
service = webdriver . IeService ( service_args = [ "–extract-path=" + temp_dir ])
Selenium v4.8
service . args << "–extract-path= #{ root_directory } "
2.3.5 - Safari specific functionality These are capabilities and features specific to Apple Safari browsers.
Unlike Chromium and Firefox drivers, the safaridriver is installed with the Operating System.
To enable automation on Safari, run the following command from the terminal:
Options Capabilities common to all browsers are described on the Options page .
Capabilities unique to Safari can be found at Apple’s page About WebDriver for Safari
Starting a Safari session with basic defined options looks like this:
Java
Python
CSharp
Ruby
JavaScript
Kotlin SafariOptions options = new SafariOptions ();
driver = new SafariDriver ( options );
options = webdriver . SafariOptions ()
driver = webdriver . Safari ( options = options )
var options = new SafariOptions ();
driver = new SafariDriver ( options );
options = Selenium :: WebDriver :: Options . safari
@driver = Selenium :: WebDriver . for :safari , options : options
. setSafariOptions ( options )
. build ();
val options = SafariOptions ()
val driver = SafariDriver ( options )
Mobile Those looking to automate Safari on iOS should look to the Appium project .
Service Service settings common to all browsers are described on the Service page .
Logging Unlike other browsers, Safari doesn’t let you choose where logs are output, or change levels. The one option
available is to turn logs off or on. If logs are toggled on, they can be found at:~/Library/Logs/com.apple.WebDriver/
.
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium v4.10
Note : Java also allows setting console output by System Property; Property key: SafariDriverService.SAFARI_DRIVER_LOGGING
Property value: "true"
or "false"
service = webdriver . SafariService ( service_args = [ "--diagnose" ])
Selenium v4.8
service . args << '--diagnose'
Safari Technology Preview Apple provides a development version of their browser — Safari Technology Preview
To use this version in your code:
Java
Python
CSharp
Ruby
JavaScript
Kotlin Selenium :: WebDriver :: Safari . technology_preview!
local_driver = Selenium :: WebDriver . for :safari
2.4 - 待機 Perhaps the most common challenge for browser automation is ensuring
that the web application is in a state to execute a particular
Selenium command as desired. The processes often end up in
a race condition where sometimes the browser gets into the right
state first (things work as intended) and sometimes the Selenium code
executes first (things do not work as intended). This is one of the
primary causes of flaky tests .
All navigation commands wait for a specific readyState
value
based on the page load strategy (the
default value to wait for is "complete"
) before the driver returns control to the code.
The readyState
only concerns itself with loading assets defined in the HTML,
but loaded JavaScript assets often result in changes to the site,
and elements that need to be interacted with may not yet be on the page
when the code is ready to execute the next Selenium command.
Similarly, in a lot of single page applications, elements get dynamically
added to a page or change visibility based on a click.
An element must be both present and
displayed on the page
in order for Selenium to interact with it.
Take this page for example: https://www.selenium.dev/selenium/web/dynamic.html
When the “Add a box!” button is clicked, a “div” element that does not exist is created.
When the “Reveal a new input” button is clicked, a hidden text field element is displayed.
In both cases the transition takes a couple seconds.
If the Selenium code is to click one of these buttons and interact with the resulting element,
it will do so before that element is ready and fail.
The first solution many people turn to is adding a sleep statement to
pause the code execution for a set period of time.
Because the code can’t know exactly how long it needs to wait, this
can fail when it doesn’t sleep long enough. Alternately, if the value is set too high
and a sleep statement is added in every place it is needed, the duration of
the session can become prohibitive.
Selenium provides two different mechanisms for synchronization that are better.
Implicit waits Selenium has a built-in way to automatically wait for elements called an implicit wait .
An implicit wait value can be set either with the timeouts
capability in the browser options, or with a driver method (as shown below).
This is a global setting that applies to every element location call for the entire session.
The default value is 0
, which means that if the element is not found, it will
immediately return an error. If an implicit wait is set, the driver will wait for the
duration of the provided value before returning the error. Note that as soon as the
element is located, the driver will return the element reference and the code will continue executing,
so a larger implicit wait value won’t necessarily increase the duration of the session.
Warning:
Do not mix implicit and explicit waits.
Doing so can cause unpredictable wait times.
For example, setting an implicit wait of 10 seconds
and an explicit wait of 15 seconds
could cause a timeout to occur after 20 seconds.
Solving our example with an implicit wait looks like this:
Java
Python
CSharp
Ruby
JavaScript
Kotlin driver . manage (). timeouts (). implicitlyWait ( Duration . ofSeconds ( 2 ));
driver . implicitly_wait ( 2 )
driver . Manage (). Timeouts (). ImplicitWait = TimeSpan . FromSeconds ( 2 );
driver . manage . timeouts . implicit_wait = 2
await driver . manage (). setTimeouts ({ implicit : 2000 });
Explicit waits Explicit waits are loops added to the code that poll the application
for a specific condition to evaluate as true before it exits the loop and
continues to the next command in the code. If the condition is not met before a designated timeout value,
the code will give a timeout error. Since there are many ways for the application not to be in the desired state,
explicit waits are a great choice to specify the exact condition to wait for
in each place it is needed.
Another nice feature is that, by default, the Selenium Wait class automatically waits for the designated element to exist.
Java
Python
CSharp
Ruby
JavaScript
Kotlin This example shows the condition being waited for as a lambda . Java also supports
Expected Conditions
Wait < WebDriver > wait = new WebDriverWait ( driver , Duration . ofSeconds ( 2 ));
wait . until ( d -> revealed . isDisplayed ());
This example shows the condition being waited for as a lambda . Python also supports
Expected Conditions
wait = WebDriverWait ( driver , timeout = 2 )
wait . until ( lambda d : revealed . is_displayed ())
WebDriverWait wait = new WebDriverWait ( driver , TimeSpan . FromSeconds ( 2 ));
wait . Until ( d => revealed . Displayed );
wait = Selenium :: WebDriver :: Wait . new
wait . until { revealed . displayed? }
JavaScript also supports Expected Conditions
await driver . wait ( until . elementIsVisible ( revealed ), 2000 );
Customization The Wait class can be instantiated with various parameters that will change how the conditions are evaluated.
This can include:
Changing how often the code is evaluated (polling interval) Specifying which exceptions should be handled automatically Changing the total timeout length Customizing the timeout message For instance, if the element not interactable error is retried by default, then we can
add an action on a method inside the code getting executed (we just need to
make sure that the code returns true
when it is successful):
Java
Python
CSharp
Ruby
JavaScript
Kotlin The easiest way to customize Waits in Java is to use the FluentWait
class:
Wait < WebDriver > wait =
new FluentWait <> ( driver )
. withTimeout ( Duration . ofSeconds ( 2 ))
. pollingEvery ( Duration . ofMillis ( 300 ))
. ignoring ( ElementNotInteractableException . class );
wait . until (
d -> {
revealed . sendKeys ( "Displayed" );
return true ;
});
errors = [ NoSuchElementException , ElementNotInteractableException ]
wait = WebDriverWait ( driver , timeout = 2 , poll_frequency = .2 , ignored_exceptions = errors )
wait . until ( lambda d : revealed