これは、このセクションの複数ページの印刷可能なビューです。 印刷するには、ここをクリックしてください.

このページの通常のビューに戻る.

ブラウザのインタラクション

ブラウザーの情報

タイトルの取得

ブラウザーから現在のページタイトルを読むことができます。

 String title = driver.getTitle();
title = driver.title
 String title = driver.Title;
 it 'gets the current title' do
 let title = await driver.getTitle();
driver.title

現在のURLを取得

ブラウザーのアドレスバーから現在のURLを読むには、次を使用します。

 String url = driver.getCurrentUrl();
url = driver.current_url
 String url = driver.Url;
 it 'gets the current url' do
 let currentUrl = await driver.getCurrentUrl();
driver.currentUrl

1 - ブラウザー ナビゲーション

ナビゲート

ブラウザーを起動した後に最初に行うことは、Webサイトを開くことです。これは1行で実現できます。

 //Convenient  driver.get("https://selenium.dev");   //Longer way  driver.navigate().to("https://selenium.dev");
driver.get("https://www.selenium.dev/selenium/web/index.html")
 //Convenient  driver.Url = "https://selenium.dev";  //Longer  driver.Navigate().GoToUrl("https://selenium.dev");
  it 'navigates to a page' do  driver.navigate.to 'https://www.selenium.dev/'
 //Convenient  await driver.get('https://www.selenium.dev');   //Longer way  await driver.navigate().to("https://www.selenium.dev/selenium/web/index.html");
//Convenient driver.get("https://selenium.dev")  //Longer way driver.navigate().to("https://selenium.dev")  

戻る

ブラウザーの戻るボタンを押す。

 //Back  driver.navigate().back();
driver.back()
 //Back  driver.Navigate().Back();
 driver.navigate.to 'https://www.selenium.dev/'
 //Back  await driver.navigate().back();
driver.navigate().back() 

次へ

ブラウザーの次へボタンを押す。

 //Forward  driver.navigate().forward();
driver.forward()
 //Forward  driver.Navigate().Forward();
 driver.navigate.to 'https://www.selenium.dev/selenium/web/inputs.html'
 //Forward  await driver.navigate().forward();
driver.navigate().forward()

更新

現在のページを更新する。

 //Refresh  driver.navigate().refresh();
driver.refresh()
 //Refresh  driver.Navigate().Refresh();
 it 'refreshes the page' do
 //Refresh  await driver.navigate().refresh();
driver.navigate().refresh()

2 - JavaScript アラート、プロンプトおよび確認

WebDriverは、JavaScriptが提供する3種類のネイティブポップアップメッセージを操作するためのAPIを提供します。 これらのポップアップはブラウザーによってスタイルが設定され、カスタマイズが制限されています。

アラート

これらの最も単純なものはアラートと呼ばれ、カスタムメッセージと、ほとんどのブラウザーでOKのラベルが付いたアラートを非表示にする単一のボタンを表示します。 ほとんどのブラウザーでは閉じるボタンを押すことで閉じることもできますが、これは常にOKボタンと同じことを行います。 アラートの例を参照してください

WebDriverはポップアップからテキストを取得し、これらのアラートを受け入れるか、または閉じることができます。

 import static org.junit.jupiter.api.Assertions.assertEquals;  public class AlertsTest extends BaseTest {   @BeforeEach
 element = driver.find_element(By.LINK_TEXT, "See an example alert")  element.click()   wait = WebDriverWait(driver, timeout=2)  alert = wait.until(lambda d : d.switch_to.alert)  text = alert.text  alert.accept()
//Click the link to activate the alert driver.FindElement(By.LinkText("See an example alert")).Click();  //Wait for the alert to be displayed and store it in a variable IAlert alert = wait.Until(ExpectedConditions.AlertIsPresent());  //Store the alert text in a variable string text = alert.Text;  //Press the OK button alert.Accept();  
 # Store the alert reference in a variable  alert = driver.switch_to.alert   # Get the text of the alert  alert.text   # Press on Cancel button  alert.dismiss
 let alert = await driver.switchTo().alert();  let alertText = await alert.getText();  await alert.accept();
//Click the link to activate the alert driver.findElement(By.linkText("See an example alert")).click()  //Wait for the alert to be displayed and store it in a variable val alert = wait.until(ExpectedConditions.alertIsPresent())  //Store the alert text in a variable val text = alert.getText()  //Press the OK button alert.accept()  

確認

確認ダイアログボックスはアラートに似ていますが、ユーザーがメッセージをキャンセルすることも選択できる点が異なります。 サンプルを確認してください

この例は、アラートを保存する別の方法も示しています。

 driver.findElement(By.id("slow-alert")).click();   wait.until(ExpectedConditions.alertIsPresent());   Alert alert = driver.switchTo().alert();  Assertions.assertEquals("Slow", alert.getText());   alert.accept();
 element = driver.find_element(By.LINK_TEXT, "See a sample confirm")  driver.execute_script("arguments[0].click();", element)   wait = WebDriverWait(driver, timeout=2)  alert = wait.until(lambda d : d.switch_to.alert)  text = alert.text  alert.dismiss()
//Click the link to activate the alert driver.FindElement(By.LinkText("See a sample confirm")).Click();  //Wait for the alert to be displayed wait.Until(ExpectedConditions.AlertIsPresent());  //Store the alert in a variable IAlert alert = driver.SwitchTo().Alert();  //Store the alert in a variable for reuse string text = alert.Text;  //Press the Cancel button alert.Dismiss();  
 # Store the alert reference in a variable  alert = driver.switch_to.alert   # Get the text of the alert  alert.text   # Press on Cancel button  alert.dismiss
 let alert = await driver.switchTo().alert();  let alertText = await alert.getText();  await alert.dismiss();
//Click the link to activate the alert driver.findElement(By.linkText("See a sample confirm")).click()  //Wait for the alert to be displayed wait.until(ExpectedConditions.alertIsPresent())  //Store the alert in a variable val alert = driver.switchTo().alert()  //Store the alert in a variable for reuse val text = alert.text  //Press the Cancel button alert.dismiss()  

プロンプト

プロンプトは確認ボックスに似ていますが、テキスト入力も含まれている点が異なります。 フォーム要素の操作と同様に、WebDriverの送信キーを使用して応答を入力できます。 これにより、プレースホルダーテキストが完全に置き換えられます。 キャンセルボタンを押してもテキストは送信されません。 サンプルプロンプトを参照してください

 @Test  public void promptDisplayAndInputTest() {  driver.get("https://www.selenium.dev/selenium/web/alerts.html#");  driver.findElement(By.id("prompt")).click();   //Wait for the alert to be displayed and store it in a variable
 element = driver.find_element(By.LINK_TEXT, "See a sample prompt")  driver.execute_script("arguments[0].click();", element)   wait = WebDriverWait(driver, timeout=2)  alert = wait.until(lambda d : d.switch_to.alert)  alert.send_keys("Selenium")  text = alert.text  alert.accept()
//Click the link to activate the alert driver.FindElement(By.LinkText("See a sample prompt")).Click();  //Wait for the alert to be displayed and store it in a variable IAlert alert = wait.Until(ExpectedConditions.AlertIsPresent());  //Type your message alert.SendKeys("Selenium");  //Press the OK button alert.Accept();  
 # Store the alert reference in a variable  alert = driver.switch_to.alert   # Type a message  alert.send_keys('selenium')   # Press on Ok button  alert.accept
 let alert = await driver.switchTo().alert();  //Type your message  await alert.sendKeys(text);  await alert.accept();
//Click the link to activate the alert driver.findElement(By.linkText("See a sample prompt")).click()  //Wait for the alert to be displayed and store it in a variable val alert = wait.until(ExpectedConditions.alertIsPresent())  //Type your message alert.sendKeys("Selenium")  //Press the OK button alert.accept()  

3 - クッキーの使用

Cookieは、Webサイトから送信され、コンピューターに保存される小さなデータです。 Cookieは、主にユーザーを認識し、保存されている情報を読み込むために使用されます。

WebDriver APIは、組み込みメソッドでCookieと対話するメソッドを提供します。

クッキーの追加

現在のブラウジングコンテキストにCookieを追加するために使用されます。 Cookieの追加では、一連の定義済みのシリアル化可能なJSONオブジェクトのみを受け入れます。 受け入れられたJSONキー値のリストへのリンクはこちらにあります。

まず、Cookieが有効になるドメインにいる必要があります。 サイトとの対話を開始する前にCookieを事前設定しようとしていて、ホームページが大きい場合/代替の読み込みに時間がかかる場合は、サイトで小さいページを見つけることです。(通常、たとえば http://example.com/some404page のような、404ページは小さいです。)

@Test  public void addCookie() {  driver.get("https://www.selenium.dev/selenium/web/blank.html");
 driver = webdriver.Chrome()  driver.get("http://www.example.com")   # Adds the cookie into current browser context  driver.add_cookie({"name": "key", "value": "value"})
 driver.Url="https://www.selenium.dev/selenium/web/blank.html";  // Add cookie into current browser context  driver.Manage().Cookies.AddCookie(new Cookie("key", "value"));
 driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'  # Add cookie into current browser context  driver.manage.add_cookie(name: 'key', value: 'value')
 await driver.get('https://www.selenium.dev/selenium/web/blank.html');
import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver  fun main() {  val driver = ChromeDriver()  try {  driver.get("https://example.com")   // Adds the cookie into current browser context  driver.manage().addCookie(Cookie("key", "value"))  } finally {  driver.quit()  } }  

命名されたクッキーの取得

関連付けられているすべてのCookieの中で、Cookie名と一致するシリアル化されたCookieデータを返します。

 public void getNamedCookie() {   driver.get("https://www.selenium.dev/selenium/web/blank.html");  // Add cookie into current browser context  driver.manage().addCookie(new Cookie("foo", "bar"));
 driver = webdriver.Chrome()  driver.get("http://www.example.com")   # Adds the cookie into current browser context  driver.add_cookie({"name": "foo", "value": "bar"})   # Get cookie details with named cookie 'foo'  print(driver.get_cookie("foo"))
 driver.Url = "https://www.selenium.dev/selenium/web/blank.html";  // Add cookie into current browser context  driver.Manage().Cookies.AddCookie(new Cookie("foo", "bar"));  // Get cookie details with named cookie 'foo'  Cookie cookie = driver.Manage().Cookies.GetCookieNamed("foo");
 driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'  # Add cookie into current browser context  driver.manage.add_cookie(name: 'foo', value: 'bar')  # Get cookie details with named cookie 'foo'  cookie = driver.manage.cookie_named('foo')
 // set a cookie on the current domain  await driver.manage().addCookie({ name: 'foo', value: 'bar' });   // Get cookie details with named cookie 'foo' 
import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver  fun main() {  val driver = ChromeDriver()  try {  driver.get("https://example.com")  driver.manage().addCookie(Cookie("foo", "bar"))   // Get cookie details with named cookie 'foo'  val cookie = driver.manage().getCookieNamed("foo")  println(cookie)  } finally {  driver.quit()  } }  

全てのクッキーの取得

現在のブラウジングコンテキストの ‘成功したシリアル化されたCookieデータ’ を返します。 ブラウザが使用できなくなった場合、エラーが返されます。

 public void getAllCookies() {   driver.get("https://www.selenium.dev/selenium/web/blank.html");  // Add cookies into current browser context  driver.manage().addCookie(new Cookie("test1", "cookie1"));  driver.manage().addCookie(new Cookie("test2", "cookie2"));  // Get cookies  Set<Cookie> cookies = driver.manage().getCookies();  for (Cookie cookie : cookies) {  if (cookie.getName().equals("test1")) {  Assertions.assertEquals(cookie.getValue(), "cookie1");  }   if (cookie.getName().equals("test2")) {  Assertions.assertEquals(cookie.getValue(), "cookie2");
 driver = webdriver.Chrome()   driver.get("http://www.example.com")   driver.add_cookie({"name": "test1", "value": "cookie1"})  driver.add_cookie({"name": "test2", "value": "cookie2"})   # Get all available cookies  print(driver.get_cookies())
 driver.Url = "https://www.selenium.dev/selenium/web/blank.html";  // Add cookies into current browser context  driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));  driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));  // Get cookies  var cookies = driver.Manage().Cookies.AllCookies;  foreach (var cookie in cookies){  if (cookie.Name.Equals("test1")){  Assert.AreEqual("cookie1", cookie.Value);  }  if (cookie.Name.Equals("test2")){  Assert.AreEqual("cookie2", cookie.Value);  }  }
 driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'  # Add cookies into current browser context  driver.manage.add_cookie(name: 'test1', value: 'cookie1')  driver.manage.add_cookie(name: 'test2', value: 'cookie2')  # Get cookies  cookies = driver.manage.all_cookies
 await driver.manage().addCookie({ name: 'test2', value: 'cookie2' });   // Get all Available cookies 
import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver  fun main() {  val driver = ChromeDriver()  try {  driver.get("https://example.com")  driver.manage().addCookie(Cookie("test1", "cookie1"))  driver.manage().addCookie(Cookie("test2", "cookie2"))   // Get All available cookies  val cookies = driver.manage().cookies  println(cookies)  } finally {  driver.quit()  } }  

クッキーの削除

指定されたCookie名と一致するCookieデータを削除します。

 public void deleteCookieNamed() {   driver.get("https://www.selenium.dev/selenium/web/blank.html");  driver.manage().addCookie(new Cookie("test1", "cookie1"));
 driver = webdriver.Chrome()   driver.get("http://www.example.com")   driver.add_cookie({"name": "test1", "value": "cookie1"})  driver.add_cookie({"name": "test2", "value": "cookie2"})   # Delete cookie with name 'test1'  driver.delete_cookie("test1")
 driver.Url = "https://www.selenium.dev/selenium/web/blank.html";  driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));  // delete cookie named  driver.Manage().Cookies.DeleteCookieNamed("test1");
 driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'  driver.manage.add_cookie(name: 'test1', value: 'cookie1')  # Delete cookie named  driver.manage.delete_cookie('test1')
 await driver.manage().addCookie({ name: 'test1', value: 'cookie1' });  await driver.manage().addCookie({ name: 'test2', value: 'cookie2' });
import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver  fun main() {  val driver = ChromeDriver()  try {  driver.get("https://example.com")  driver.manage().addCookie(Cookie("test1", "cookie1"))  val cookie1 = Cookie("test2", "cookie2")  driver.manage().addCookie(cookie1)   // delete a cookie with name 'test1'  driver.manage().deleteCookieNamed("test1")   // delete cookie by passing cookie object of current browsing context.  driver.manage().deleteCookie(cookie1)  } finally {  driver.quit()  } }  

全てのクッキーの削除

現在のブラウジングコンテキストの全てのCookieを削除します。

 public void deleteAllCookies() {   driver.get("https://www.selenium.dev/selenium/web/blank.html");  // Add cookies into current browser context  driver.manage().addCookie(new Cookie("test1", "cookie1"));  driver.manage().addCookie(new Cookie("test2", "cookie2"));
 driver = webdriver.Chrome()   driver.get("http://www.example.com")   driver.add_cookie({"name": "test1", "value": "cookie1"})  driver.add_cookie({"name": "test2", "value": "cookie2"})   # Delete all cookies  driver.delete_all_cookies()
 driver.Url = "https://www.selenium.dev/selenium/web/blank.html";  // Add cookies into current browser context  driver.Manage().Cookies.AddCookie(new Cookie("test1", "cookie1"));  driver.Manage().Cookies.AddCookie(new Cookie("test2", "cookie2"));  // Delete All cookies  driver.Manage().Cookies.DeleteAllCookies();
 driver.navigate.to 'https://www.selenium.dev/selenium/web/blank.html'  # Add cookies into current browser context  driver.manage.add_cookie(name: 'test1', value: 'cookie1')  driver.manage.add_cookie(name: 'test2', value: 'cookie2')  # Delete All cookies  driver.manage.delete_all_cookies
 await driver.manage().addCookie({ name: 'test1', value: 'cookie1' });  await driver.manage().addCookie({ name: 'test2', value: 'cookie2' });
import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver  fun main() {  val driver = ChromeDriver()  try {  driver.get("https://example.com")  driver.manage().addCookie(Cookie("test1", "cookie1"))  driver.manage().addCookie(Cookie("test2", "cookie2"))   // deletes all cookies  driver.manage().deleteAllCookies()  } finally {  driver.quit()  } }  

SameSite Cookie属性

これにより、ユーザーは、サードパーティのサイトによって開始されたリクエストとともに Cookieを送信するかどうかをブラウザに指示できます。 CSRF(クロスサイトリクエストフォージェリ)攻撃を防ぐために導入されました。

SameSite Cookie属性は、2つのパラメーターを命令として受け入れます。

Strict:

SameSite属性が Strict に設定されている場合、CookieはサードパーティのWebサイトによって 開始されたリクエストとともに送信されません。

Lax:

CookieのSameSite属性を Lax に設定すると、CookieはサードパーティのWebサイトによって 開始されたGETリクエストとともに送信されます。

Note: As of now this feature is landed in chrome(80+version), Firefox(79+version) and works with Selenium 4 and later versions.

 @Test  public void sameSiteCookie() {  driver.get("http://www.example.com");   Cookie cookie = new Cookie.Builder("key", "value").sameSite("Strict").build();  Cookie cookie1 = new Cookie.Builder("key", "value").sameSite("Lax").build();   driver.manage().addCookie(cookie);  driver.manage().addCookie(cookie1); 
 driver = webdriver.Chrome()   driver.get("http://www.example.com")   # Adds the cookie into current browser context with sameSite 'Strict' (or) 'Lax'  driver.add_cookie({"name": "foo", "value": "value", "sameSite": "Strict"})  driver.add_cookie({"name": "foo1", "value": "value", "sameSite": "Lax"})   cookie1 = driver.get_cookie("foo")  cookie2 = driver.get_cookie("foo1")   print(cookie1)  print(cookie2)
using OpenQA.Selenium; using OpenQA.Selenium.Chrome;  namespace SameSiteCookie {  class SameSiteCookie {  static void Main(string[] args) {  IWebDriver driver = new ChromeDriver();  try {  driver.Navigate().GoToUrl("http://www.example.com");   var cookie1Dictionary = new System.Collections.Generic.Dictionary<string, object>() {  { "name", "test1" }, { "value", "cookie1" }, { "sameSite", "Strict" } };  var cookie1 = Cookie.FromDictionary(cookie1Dictionary);   var cookie2Dictionary = new System.Collections.Generic.Dictionary<string, object>() {  { "name", "test2" }, { "value", "cookie2" }, { "sameSite", "Lax" } };  var cookie2 = Cookie.FromDictionary(cookie2Dictionary);   driver.Manage().Cookies.AddCookie(cookie1);  driver.Manage().Cookies.AddCookie(cookie2);   System.Console.WriteLine(cookie1.SameSite);  System.Console.WriteLine(cookie2.SameSite);  } finally {  driver.Quit();  }  }  } }  
require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome  begin  driver.get 'https://www.example.com'  # Adds the cookie into current browser context with sameSite 'Strict' (or) 'Lax'  driver.manage.add_cookie(name: "foo", value: "bar", same_site: "Strict")  driver.manage.add_cookie(name: "foo1", value: "bar", same_site: "Lax")  puts driver.manage.cookie_named('foo')  puts driver.manage.cookie_named('foo1') ensure  driver.quit end  
 it('Create cookies with sameSite', async function() {  await driver.get('https://www.selenium.dev/selenium/web/blank.html'); 
import org.openqa.selenium.Cookie import org.openqa.selenium.chrome.ChromeDriver  fun main() {  val driver = ChromeDriver()  try {  driver.get("http://www.example.com")  val cookie = Cookie.Builder("key", "value").sameSite("Strict").build()  val cookie1 = Cookie.Builder("key", "value").sameSite("Lax").build()  driver.manage().addCookie(cookie)  driver.manage().addCookie(cookie1)  println(cookie.getSameSite())  println(cookie1.getSameSite())  } finally {  driver.quit()  } }  

4 - IFrame と Frame の操作

Frameは、同じドメイン上の複数のドキュメントからサイトレイアウトを構築する非推奨の手段となりました。 HTML5以前のWebアプリを使用している場合を除き、frameを使用することはほとんどありません。 iFrameは、まったく異なるドメインからのドキュメントの挿入を許可し、今でも一般的に使用されています。

FrameまたはiFrameを使用する必要がある場合、Webdriverを使用して同じ方法で作業できます。 iFrame内のボタンがある場合を考えてみましょう。ブラウザー開発ツールを使用して要素を検査すると、次のように表示される場合があります。

<div id="modal">  <iframe id="buttonframe" name="myframe" src="https://seleniumhq.github.io">  <button>Click here</button>  </iframe> </div> 

iFrameがなければ、次のようなボタンを使用してボタンをクリックします。

//This won't work driver.findElement(By.tagName("button")).click();  
 # This Wont work driver.find_element(By.TAG_NAME, 'button').click()  
//This won't work driver.FindElement(By.TagName("button")).Click();  
 # This won't work driver.find_element(:tag_name,'button').click  
// This won't work await driver.findElement(By.css('button')).click();  
//This won't work driver.findElement(By.tagName("button")).click()  

ただし、iFrameの外側にボタンがない場合は、代わりにno such elementエラーが発生する可能性があります。 これは、Seleniumがトップレベルのドキュメントの要素のみを認識するために発生します。 ボタンを操作するには、ウィンドウを切り替える方法と同様に、最初にFrameに切り替える必要があります。 WebDriverは、Frameに切り替える3つの方法を提供します。

WebElementを使う

WebElementを使用した切り替えは、最も柔軟なオプションです。好みのセレクタを使用してFrameを見つけ、それに切り替えることができます。

 //switch To IFrame using Web Element  WebElement iframe = driver.findElement(By.id("iframe1"));  //Switch to the frame  driver.switchTo().frame(iframe);  assertEquals(true, driver.getPageSource().contains("We Leave From Here"));  //Now we can type text into email field  WebElement emailE = driver.findElement(By.id("email"));  emailE.sendKeys("admin@selenium.dev");  emailE.clear();
# --- Switch to iframe using WebElement --- iframe = driver.find_element(By.ID, "iframe1") driver.switch_to.frame(iframe) assert "We Leave From Here" in driver.page_source  email_element = driver.find_element(By.ID, "email") email_element.send_keys("admin@selenium.dev") email_element.clear() driver.switch_to.default_content()
 //switch To IFrame using Web Element  IWebElement iframe = driver.FindElement(By.Id("iframe1"));  //Switch to the frame  driver.SwitchTo().Frame(iframe);  Assert.AreEqual(true, driver.PageSource.Contains("We Leave From Here"));  //Now we can type text into email field  IWebElement emailE = driver.FindElement(By.Id("email"));  emailE.SendKeys("admin@selenium.dev");  emailE.Clear();
 iframe = driver.find_element(:id, 'iframe1')  driver.switch_to.frame(iframe)  expect(driver.page_source).to include('We Leave From Here')   email_element = driver.find_element(:id, 'email')  email_element.send_keys('admin@selenium.dev')  email_element.clear  driver.switch_to.default_content   # --- Switch to iframe using name or ID ---  iframe1 = driver.find_element(:name, 'iframe1-name')
// Store the web element const iframe = driver.findElement(By.css('#modal > iframe'));  // Switch to the frame await driver.switchTo().frame(iframe);  // Now we can click the button await driver.findElement(By.css('button')).click();  
//Store the web element val iframe = driver.findElement(By.cssSelector("#modal>iframe"))  //Switch to the frame driver.switchTo().frame(iframe)  //Now we can click the button driver.findElement(By.tagName("button")).click()  

nameまたはIDを使う

FrameまたはiFrameにidまたはname属性がある場合、代わりにこれを使うことができます。 名前またはIDがページ上で一意でない場合、最初に見つかったものに切り替えます。

 //switch To IFrame using name or id  WebElement iframe1=driver.findElement(By.name("iframe1-name"));  //Switch to the frame  driver.switchTo().frame(iframe1);  assertEquals(true, driver.getPageSource().contains("We Leave From Here"));  WebElement email = driver.findElement(By.id("email"));  //Now we can type text into email field  email.sendKeys("admin@selenium.dev");  email.clear();
# --- Switch to iframe using name or ID --- iframe1=driver.find_element(By.NAME, "iframe1-name") # (This line doesn't switch, just locates) driver.switch_to.frame(iframe1) assert "We Leave From Here" in driver.page_source  email = driver.find_element(By.ID, "email") email.send_keys("admin@selenium.dev") email.clear() driver.switch_to.default_content()
 //switch To IFrame using name or id  IWebElement iframe1=driver.FindElement(By.Name("iframe1-name"));  //Switch to the frame  driver.SwitchTo().Frame(iframe1);  Assert.AreEqual(true, driver.PageSource.Contains("We Leave From Here"));  IWebElement email = driver.FindElement(By.Id("email"));  //Now we can type text into email field  email.SendKeys("admin@selenium.dev");  email.Clear();
 iframe1 = driver.find_element(:name, 'iframe1-name')  driver.switch_to.frame(iframe1)  expect(driver.page_source).to include('We Leave From Here')   email = driver.find_element(:id, 'email')  email.send_keys('admin@selenium.dev')  email.clear  driver.switch_to.default_content
// Using the ID await driver.switchTo().frame('buttonframe');  // Or using the name instead await driver.switchTo().frame('myframe');  // Now we can click the button await driver.findElement(By.css('button')).click();  
//Using the ID driver.switchTo().frame("buttonframe")  //Or using the name instead driver.switchTo().frame("myframe")  //Now we can click the button driver.findElement(By.tagName("button")).click()  

インデックスを使う

JavaScriptの window.frames を使用して照会できるように、Frameのインデックスを使用することもできます。

{
 //switch To IFrame using index  driver.switchTo().frame(0);
driver.switch_to.frame(0) assert "We Leave From Here" in driver.page_source
 //switch To IFrame using index  driver.SwitchTo().Frame(0);
 driver.switch_to.frame(0)  expect(driver.page_source).to include('We Leave From Here')
// Switches to the second frame await driver.switchTo().frame(1);
// Switches to the second frame driver.switchTo().frame(1)

Frameを終了する

iFrameまたはFrameセットを終了するには、次のようにデフォルトのコンテンツに切り替えます。

 //leave frame  driver.switchTo().defaultContent();
 # switch back to default content driver.switch_to.default_content()  
 //leave frame  driver.SwitchTo().DefaultContent();
 driver.switch_to.default_content  expect(driver.page_source).to include('This page has iframes')
// Return to the top level await driver.switchTo().defaultContent();  
// Return to the top level driver.switchTo().defaultContent()  

5 - Print Page

Printing a webpage is a common task, whether for sharing information or maintaining archives. Selenium simplifies this process through its PrintOptions, PrintsPage, and browsingContext classes, which provide a flexible and intuitive interface for automating the printing of web pages. These classes enable you to configure printing preferences, such as page layout, margins, and scaling, ensuring that the output meets your specific requirements.

Configuring

Orientation

Using the getOrientation() and setOrientation() methods, you can get/set the page orientation — either PORTRAIT or LANDSCAPE.

 driver.get("https://www.selenium.dev/");  PrintOptions printOptions = new PrintOptions();  printOptions.setOrientation(PrintOptions.Orientation.LANDSCAPE);  PrintOptions.Orientation current_orientation = printOptions.getOrientation();
 public void TestOrientation()  {  IWebDriver driver = new ChromeDriver();  driver.Navigate().GoToUrl("https://selenium.dev");  PrintOptions printOptions = new PrintOptions();  printOptions.Orientation = PrintOrientation.Landscape;  PrintOrientation currentOrientation = printOptions.Orientation;  driver.Quit();
 driver.get("https://www.selenium.dev/")  print_options = PrintOptions()  print_options.orientation = "landscape" ## landscape or portrait

Range

Using the getPageRanges() and setPageRanges() methods, you can get/set the range of pages to print — e.g. “2-4”.

 driver.get("https://www.selenium.dev/");  PrintOptions printOptions = new PrintOptions();  printOptions.setPageRanges("1-2");  String[] current_range = printOptions.getPageRanges();
 [TestMethod]  public void TestRange()  {  IWebDriver driver = new ChromeDriver();  driver.Navigate().GoToUrl("https://selenium.dev");  PrintOptions printOptions = new PrintOptions();  printOptions.AddPageRangeToPrint("1-3"); // add range of pages  printOptions.AddPageToPrint(5); // add individual page
 driver.get("https://www.selenium.dev/")  print_options = PrintOptions()  print_options.page_ranges = ["1, 2, 3"] ## ["1", "2", "3"] or ["1-3"]

Size

Using the getPageSize() and setPageSize() methods, you can get/set the paper size to print — e.g. “A0”, “A6”, “Legal”, “Tabloid”, etc.

 driver.get("https://www.selenium.dev/");  PrintOptions printOptions = new PrintOptions();  printOptions.setPageSize(new PageSize(27.94, 21.59)); // A4 size in cm  double currentHeight = printOptions.getPageSize().getHeight(); // use getWidth() to retrieve width
  [TestMethod]  public void TestSize()  {  IWebDriver driver = new ChromeDriver();  driver.Navigate().GoToUrl("https://www.selenium.dev/");  PrintOptions printOptions = new PrintOptions();
 driver.get("https://www.selenium.dev/")  print_options = PrintOptions()  print_options.page_height = 27.94 # Use page_width to assign width

Margins

Using the getPageMargin() and setPageMargin() methods, you can set the margin sizes of the page you wish to print — i.e. top, bottom, left, and right margins.

 driver.get("https://www.selenium.dev/");  PrintOptions printOptions = new PrintOptions();  PageMargin margins = new PageMargin(1.0,1.0,1.0,1.0);  printOptions.setPageMargin(margins);  double topMargin = margins.getTop();  double bottomMargin = margins.getBottom();  double leftMargin = margins.getLeft();  double rightMargin = margins.getRight();
 driver.Quit();  }   [TestMethod]  public void TestMargins()  {  IWebDriver driver = new ChromeDriver();
 driver.get("https://www.selenium.dev/")  print_options = PrintOptions()  print_options.margin_top = 10  print_options.margin_bottom = 10  print_options.margin_left = 10  print_options.margin_right = 10

Scale

Using getScale() and setScale() methods, you can get/set the scale of the page you wish to print — e.g. 1.0 is 100% or default, 0.25 is 25%, etc.

 {  driver.get("https://www.selenium.dev/");  PrintOptions printOptions = new PrintOptions();  printOptions.setScale(.50);  double current_scale = printOptions.getScale();
 driver.Quit();  }    [TestMethod]  public void TestScale()  {  IWebDriver driver = new ChromeDriver();
 driver.get("https://www.selenium.dev/")  print_options = PrintOptions()  print_options.scale = 0.5 ## 0.1 to 2.0  current_scale = print_options.scale

Background

Using getBackground() and setBackground() methods, you can get/set whether background colors and images appear — boolean true or false.

 driver.get("https://www.selenium.dev/");  PrintOptions printOptions = new PrintOptions();  printOptions.setBackground(true);  boolean current_background = printOptions.getBackground();
 }   [TestMethod]  public void TestBackgrounds()  {  IWebDriver driver = new ChromeDriver();  driver.Navigate().GoToUrl("https://www.selenium.dev/");  PrintOptions printOptions = new PrintOptions();
 driver.get("https://www.selenium.dev/")  print_options = PrintOptions()  print_options.background = True ## True or False

ShrinkToFit

Using getShrinkToFit() and setShrinkToFit() methods, you can get/set whether the page will shrink-to-fit content on the page — boolean true or false.

 driver.get("https://www.selenium.dev/");  PrintOptions printOptions = new PrintOptions();  printOptions.setShrinkToFit(true);  boolean current_shrink_to_fit = printOptions.getShrinkToFit();
 printOptions.ScaleFactor = 0.5;  double currentScale = printOptions.ScaleFactor;  driver.Quit();  }   [TestMethod]  public void TestShrinkToFit()  {
 driver.get("https://www.selenium.dev/")  print_options = PrintOptions()  print_options.shrink_to_fit = True ## True or False

Printing

Once you’ve configured your PrintOptions, you’re ready to print the page. To do this, you can invoke the print function, which generates a PDF representation of the web page. The resulting PDF can be saved to your local storage for further use or distribution. Using PrintsPage(), the print command will return the PDF data in base64-encoded format, which can be decoded and written to a file in your desired location, and using BrowsingContext() will return a String.

There may currently be multiple implementations depending on your language of choice. For example, with Java you have the ability to print using either BrowingContext() or PrintsPage(). Both take PrintOptions() objects as a parameter.

Note: BrowsingContext() is part of Selenium’s BiDi implementation. To enable BiDi see Enabling Bidi

PrintsPage()

 driver.get("https://www.selenium.dev/");  PrintsPage printer = (PrintsPage) driver;  PrintOptions printOptions = new PrintOptions();  Pdf printedPage = printer.print(printOptions);  Assertions.assertNotNull(printedPage);

BrowsingContext()

 BrowsingContext browsingContext = new BrowsingContext(driver, driver.getWindowHandle());  driver.get("https://www.selenium.dev/selenium/web/formPage.html");  PrintOptions printOptions = new PrintOptions();  String printPage = browsingContext.print(printOptions);  Assertions.assertTrue(printPage.length() > 0);
 PrintOptions printOptions = new PrintOptions();  printOptions.ShrinkToFit = true;  bool currentShrinkToFit = printOptions.ShrinkToFit;  driver.Quit();  }   [TestMethod]  public void PrintWithPrintsPageTest()

print_page()

 driver.get("https://www.selenium.dev/")  print_options = PrintOptions()  pdf = driver.print_page(print_options)

6 - ウィンドウとタブの操作

ウィンドウとタブ

ウィンドウハンドルの取得

WebDriverは、ウィンドウとタブを区別しません。 サイトが新しいタブまたはウィンドウを開く場合、Seleniumはウィンドウハンドルを使って連動します。 各ウィンドウには一意の識別子があり、これは単一のセッションで持続します。 次のコードを使用して、現在のウィンドウのウィンドウハンドルを取得できます。

 // Navigate to Url  driver.get("https://www.selenium.dev/selenium/web/window_switching_tests/page_with_frame.html");  //fetch handle of this  String currHandle=driver.getWindowHandle();  assertNotNull(currHandle);
driver.current_window_handle
 // Navigate to Url  driver.Url="https://www.selenium.dev/selenium/web/window_switching_tests/page_with_frame.html";  //fetch handle of this  String currHandle = driver.CurrentWindowHandle;  Assert.IsNotNull(currHandle);
driver.window_handle
await driver.getWindowHandle();
driver.windowHandle

ウィンドウまたはタブの切り替え

新しいウィンドウで開くリンクをクリックすると、新しいウィンドウまたはタブが画面にフォーカスされますが、WebDriverはオペレーティングシステムがアクティブと見なすウィンドウを認識しません。 新しいウィンドウで作業するには、それに切り替える必要があります。 開いているタブまたはウィンドウが2つしかなく、どちらのウィンドウから開始するかがわかっている場合、削除のプロセスによって、WebDriverが表示できる両方のウィンドウまたはタブをループし、元のウィンドウまたはタブに切り替えることができます。

ただし、Selenium 4には、新しいタブ(または)新しいウィンドウを作成して自動的に切り替える新しいAPI NewWindow が用意されています。

 //click on link to open a new window  driver.findElement(By.linkText("Open new window")).click();  //fetch handles of all windows, there will be two, [0]- default, [1] - new window  Object[] windowHandles=driver.getWindowHandles().toArray();  driver.switchTo().window((String) windowHandles[1]);  //assert on title of new window  String title=driver.getTitle();  assertEquals("Simple Page",title);
from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC   # Start the driver with webdriver.Firefox() as driver:  # Open URL  driver.get("https://seleniumhq.github.io")   # Setup wait for later  wait = WebDriverWait(driver, 10)   # Store the ID of the original window  original_window = driver.current_window_handle   # Check we don't have other windows open already  assert len(driver.window_handles) == 1   # Click the link which opens in a new window  driver.find_element(By.LINK_TEXT, "new window").click()   # Wait for the new window or tab  wait.until(EC.number_of_windows_to_be(2))   # Loop through until we find a new window handle  for window_handle in driver.window_handles:  if window_handle != original_window:  driver.switch_to.window(window_handle)  break   # Wait for the new tab to finish loading content  wait.until(EC.title_is("SeleniumHQ Browser Automation"))  
 //click on link to open a new window  driver.FindElement(By.LinkText("Open new window")).Click();  //fetch handles of all windows, there will be two, [0]- default, [1] - new window  IList<string> windowHandles = new List<string>(driver.WindowHandles);  driver.SwitchTo().Window(windowHandles[1]);  //assert on title of new window  String title = driver.Title;  Assert.AreEqual("Simple Page", title);
 #Store the ID of the original window original_window = driver.window_handle   #Check we don't have other windows open already assert(driver.window_handles.length == 1, 'Expected one window')   #Click the link which opens in a new window driver.find_element(link: 'new window').click   #Wait for the new window or tab wait.until { driver.window_handles.length == 2 }   #Loop through until we find a new window handle driver.window_handles.each do |handle|  if handle != original_window  driver.switch_to.window handle  break  end end   #Wait for the new tab to finish loading content wait.until { driver.title == 'Selenium documentation'}  
//Store the ID of the original window const originalWindow = await driver.getWindowHandle();  //Check we don't have other windows open already assert((await driver.getAllWindowHandles()).length === 1);  //Click the link which opens in a new window await driver.findElement(By.linkText('new window')).click();  //Wait for the new window or tab await driver.wait(  async () => (await driver.getAllWindowHandles()).length === 2,  10000  );  //Loop through until we find a new window handle const windows = await driver.getAllWindowHandles(); windows.forEach(async handle => {  if (handle !== originalWindow) {  await driver.switchTo().window(handle);  } });  //Wait for the new tab to finish loading content await driver.wait(until.titleIs('Selenium documentation'), 10000);  
//Store the ID of the original window val originalWindow = driver.getWindowHandle()  //Check we don't have other windows open already assert(driver.getWindowHandles().size() === 1)  //Click the link which opens in a new window driver.findElement(By.linkText("new window")).click()  //Wait for the new window or tab wait.until(numberOfWindowsToBe(2))  //Loop through until we find a new window handle for (windowHandle in driver.getWindowHandles()) {  if (!originalWindow.contentEquals(windowHandle)) {  driver.switchTo().window(windowHandle)  break  } }  //Wait for the new tab to finish loading content wait.until(titleIs("Selenium documentation"))   

ウィンドウまたはタブを閉じる

ウィンドウまたはタブでの作業が終了し、 かつ ブラウザーで最後に開いたウィンドウまたはタブではない場合、それを閉じて、以前使用していたウィンドウに切り替える必要があります。 前のセクションのコードサンプルに従ったと仮定すると、変数に前のウィンドウハンドルが格納されます。 これをまとめると以下のようになります。

 //closing current window  driver.close();  //Switch back to the old tab or window  driver.switchTo().window((String) windowHandles[0]);
 #Close the tab or window driver.close()   #Switch back to the old tab or window driver.switch_to.window(original_window)  
 //closing current window  driver.Close();  //Switch back to the old tab or window  driver.SwitchTo().Window(windowHandles[0]);
 #Close the tab or window driver.close   #Switch back to the old tab or window driver.switch_to.window original_window  
//Close the tab or window await driver.close();  //Switch back to the old tab or window await driver.switchTo().window(originalWindow);  
//Close the tab or window driver.close()  //Switch back to the old tab or window driver.switchTo().window(originalWindow)   

ウィンドウを閉じた後に別のウィンドウハンドルに切り替えるのを忘れると、現在閉じられているページでWebDriverが実行されたままになり、 No Such Window Exception が発行されます。実行を継続するには、有効なウィンドウハンドルに切り替える必要があります。

新しいウィンドウ(または)新しいタブを作成して切り替える

新しいウィンドウ(または)タブを作成し、画面上の新しいウィンドウまたはタブにフォーカスします。 新しいウィンドウ(または)タブを使用するように切り替える必要はありません。 新しいウィンドウ以外に3つ以上のウィンドウ(または)タブを開いている場合、WebDriverが表示できる両方のウィンドウまたはタブをループして、元のものではないものに切り替えることができます。

注意: この機能は、Selenium 4以降のバージョンで機能します。

 //Opens a new tab and switches to new tab  driver.switchTo().newWindow(WindowType.TAB);  assertEquals("",driver.getTitle());   //Opens a new window and switches to new window  driver.switchTo().newWindow(WindowType.WINDOW);  assertEquals("",driver.getTitle());
 # Opens a new tab and switches to new tab driver.switch_to.new_window('tab')   # Opens a new window and switches to new window driver.switch_to.new_window('window')  
 //Opens a new tab and switches to new tab  driver.SwitchTo().NewWindow(WindowType.Tab);  Assert.AreEqual("", driver.Title);   //Opens a new window and switches to new window  driver.SwitchTo().NewWindow(WindowType.Window);  Assert.AreEqual("", driver.Title);

Opens a new tab and switches to new tab

 driver.switch_to.new_window(:tab)

Opens a new window and switches to new window

 driver.switch_to.new_window(:window)
Opens a new tab and switches to new tab
 await driver.switchTo().newWindow('tab');
Opens a new window and switches to new window:
 await driver.switchTo().newWindow('window');
// Opens a new tab and switches to new tab driver.switchTo().newWindow(WindowType.TAB)  // Opens a new window and switches to new window driver.switchTo().newWindow(WindowType.WINDOW)  

セッションの終了時にブラウザーを終了する

ブラウザーセッションを終了したら、closeではなく、quitを呼び出す必要があります。

 //quitting driver  driver.quit(); //close all windows
driver.quit()
 //quitting driver  driver.Quit(); //close all windows
driver.quit
await driver.quit();
driver.quit()
  • Quitは、
    • そのWebDriverセッションに関連付けられているすべてのウィンドウとタブを閉じます
    • ブラウザーのプロセス
    • バックグラウンドのドライバーのプロセス
    • ブラウザーが使用されなくなったことをSelenium Gridに通知して、別のセッションで使用できるようにします(Selenium Gridを使用している場合)

quitの呼び出しに失敗すると、余分なバックグラウンドプロセスとポートがマシン上で実行されたままになり、後で問題が発生する可能性があります。

一部のテストフレームワークでは、テストの終了時にフックできるメソッドとアノテーションを提供しています。

/**  * Example using JUnit  * https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/AfterAll.html  */ @AfterAll public static void tearDown() {  driver.quit(); }  
 # unittest teardown  # https://docs.python.org/3/library/unittest.html?highlight=teardown#unittest.TestCase.tearDown def tearDown(self):  self.driver.quit()  
/*  Example using Visual Studio's UnitTesting  https://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.aspx */ [TestCleanup] public void TearDown() {  driver.Quit(); }  
 # UnitTest Teardown  # https://www.rubydoc.info/github/test-unit/test-unit/Test/Unit/TestCase def teardown  @driver.quit end  
/**  * Example using Mocha  * https://mochajs.org/#hooks  */ after('Tear down', async function () {  await driver.quit(); });  
/**  * Example using JUnit  * https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/AfterAll.html  */ @AfterAll fun tearDown() {  driver.quit() }  

テストコンテキストでWebDriverを実行していない場合は、ほとんどの言語で提供されている try / finally の使用を検討して、例外がWebDriverセッションをクリーンアップするようにします。

try {  //WebDriver code here... } finally {  driver.quit(); }  
try:  #WebDriver code here... finally:  driver.quit()  
try {  //WebDriver code here... } finally {  driver.Quit(); }  
begin  #WebDriver code here... ensure  driver.quit end  
try {  //WebDriver code here... } finally {  await driver.quit(); }  
try {  //WebDriver code here... } finally {  driver.quit() }  

PythonのWebDriverは、pythonコンテキストマネージャーをサポートするようになりました。 withキーワードを使用すると、実行終了時にドライバーを自動的に終了できます。

with webdriver.Firefox() as driver:  # WebDriver code here...  # WebDriver will automatically quit after indentation 

ウィンドウマネジメント

画面解像度はWebアプリケーションのレンダリング方法に影響を与える可能性があるため、WebDriverはブラウザーウィンドウを移動およびサイズ変更するメカニズムを提供します。

ウィンドウサイズの取得

ブラウザーウィンドウのサイズをピクセル単位で取得します。

//Access each dimension individually int width = driver.manage().window().getSize().getWidth(); int height = driver.manage().window().getSize().getHeight();  //Or store the dimensions and query them later Dimension size = driver.manage().window().getSize(); int width1 = size.getWidth(); int height1 = size.getHeight();  
 # Access each dimension individually width = driver.get_window_size().get("width") height = driver.get_window_size().get("height")   # Or store the dimensions and query them later size = driver.get_window_size() width1 = size.get("width") height1 = size.get("height")  
//Access each dimension individually int width = driver.Manage().Window.Size.Width; int height = driver.Manage().Window.Size.Height;  //Or store the dimensions and query them later System.Drawing.Size size = driver.Manage().Window.Size; int width1 = size.Width; int height1 = size.Height;  
 # Access each dimension individually width = driver.manage.window.size.width height = driver.manage.window.size.height   # Or store the dimensions and query them later size = driver.manage.window.size width1 = size.width height1 = size.height  
Access each dimension individually
 const { width, height } = await driver.manage().window().getRect();
(or) store the dimensions and query them later
 const rect = await driver.manage().window().getRect();  const windowWidth = rect.width;  const windowHeight = rect.height;
//Access each dimension individually val width = driver.manage().window().size.width val height = driver.manage().window().size.height  //Or store the dimensions and query them later val size = driver.manage().window().size val width1 = size.width val height1 = size.height  

ウィンドウサイズの設定

ウィンドウを復元し、ウィンドウサイズを設定します。

driver.manage().window().setSize(new Dimension(1024, 768));
driver.set_window_size(1024, 768)
driver.Manage().Window.Size = new Size(1024, 768);
driver.manage.window.resize_to(1024,768)
await driver.manage().window().setRect({ width: 1024, height: 768 });
driver.manage().window().size = Dimension(1024, 768)

ウィンドウの位置を取得

ブラウザーウィンドウの左上の座標を取得します。

// Access each dimension individually int x = driver.manage().window().getPosition().getX(); int y = driver.manage().window().getPosition().getY();  // Or store the dimensions and query them later Point position = driver.manage().window().getPosition(); int x1 = position.getX(); int y1 = position.getY();  
 # Access each dimension individually x = driver.get_window_position().get('x') y = driver.get_window_position().get('y')   # Or store the dimensions and query them later position = driver.get_window_position() x1 = position.get('x') y1 = position.get('y')  
//Access each dimension individually int x = driver.Manage().Window.Position.X; int y = driver.Manage().Window.Position.Y;  //Or store the dimensions and query them later Point position = driver.Manage().Window.Position; int x1 = position.X; int y1 = position.Y;  
 #Access each dimension individually x = driver.manage.window.position.x y = driver.manage.window.position.y   # Or store the dimensions and query them later rect = driver.manage.window.rect x1 = rect.x y1 = rect.y  
Access each dimension individually
 const { x, y } = await driver.manage().window().getRect();
(or) store the dimensions and query them later
 const rect = await driver.manage().window().getRect();  const x1 = rect.x;  const y1 = rect.y;
// Access each dimension individually val x = driver.manage().window().position.x val y = driver.manage().window().position.y  // Or store the dimensions and query them later val position = driver.manage().window().position val x1 = position.x val y1 = position.y   
## ウィンドウの位置設定 

選択した位置にウィンドウを移動します。

// Move the window to the top left of the primary monitor driver.manage().window().setPosition(new Point(0, 0));  
 # Move the window to the top left of the primary monitor driver.set_window_position(0, 0)  
// Move the window to the top left of the primary monitor driver.Manage().Window.Position = new Point(0, 0);  
driver.manage.window.move_to(0,0)  
// Move the window to the top left of the primary monitor await driver.manage().window().setRect({ x: 0, y: 0 });  
// Move the window to the top left of the primary monitor driver.manage().window().position = Point(0,0)  

ウィンドウの最大化

ウィンドウを拡大します。ほとんどのオペレーティングシステムでは、オペレーティングシステムのメニューとツールバーをブロックすることなく、ウィンドウが画面いっぱいに表示されます。

driver.manage().window().maximize();
driver.maximize_window()
driver.Manage().Window.Maximize();
driver.manage.window.maximize
await driver.manage().window().maximize();
driver.manage().window().maximize()

ウィンドウを最小化

現在のブラウジングコンテキストのウィンドウを最小化します。 このコマンドの正確な動作は、個々のウィンドウマネージャーに固有のものです。

ウィンドウを最小化すると、通常、システムトレイのウィンドウが非表示になります。

注:この機能は、Selenium 4以降のバージョンで機能します。

driver.manage().window().minimize();
driver.minimize_window()
driver.Manage().Window.Minimize();
driver.manage.window.minimize
await driver.manage().window().minimize();
driver.manage().window().minimize()

全画面ウィンドウ

ほとんどのブラウザーでF11を押すのと同じように、画面全体に表示されます。

driver.manage().window().fullscreen();
driver.fullscreen_window()
driver.Manage().Window.FullScreen();
driver.manage.window.full_screen
await driver.manage().window().fullscreen();
driver.manage().window().fullscreen()

スクリーンショットの取得

現在のブラウジング コンテキストのスクリーンショットをキャプチャするために使います。
WebDriver エンドポイントの スクリーンショット は、 Base64 形式でエンコードされたスクリーンショットを返します。

import org.apache.commons.io.FileUtils; import org.openqa.selenium.chrome.ChromeDriver; import java.io.*; import org.openqa.selenium.*;  public class SeleniumTakeScreenshot {  public static void main(String args[]) throws IOException {  WebDriver driver = new ChromeDriver();  driver.get("http://www.example.com");  File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);  FileUtils.copyFile(scrFile, new File("./image.png"));  driver.quit();  } }  
from selenium import webdriver  driver = webdriver.Chrome()   # Navigate to url driver.get("http://www.example.com")   # Returns and base64 encoded string into image driver.save_screenshot('./image.png')  driver.quit()
 using OpenQA.Selenium;  using OpenQA.Selenium.Chrome;  using OpenQA.Selenium.Support.UI;   var driver = new ChromeDriver();  driver.Navigate().GoToUrl("http://www.example.com");  Screenshot screenshot = (driver as ITakesScreenshot).GetScreenshot();  screenshot.SaveAsFile("screenshot.png", ScreenshotImageFormat.Png); // Format values are Bmp, Gif, Jpeg, Png, Tiff  
require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome  begin  driver.get 'https://example.com/'   # Takes and Stores the screenshot in specified path  driver.save_screenshot('./image.png')  end  
 // Captures the screenshot  let encodedString = await driver.takeScreenshot();  // save screenshot as below  // await fs.writeFileSync('./image.png', encodedString, 'base64'); 
import com.oracle.tools.packager.IOUtils.copyFile import org.openqa.selenium.* import org.openqa.selenium.chrome.ChromeDriver import java.io.File  fun main(){  val driver = ChromeDriver()  driver.get("https://www.example.com")  val scrFile = (driver as TakesScreenshot).getScreenshotAs<File>(OutputType.FILE)  copyFile(scrFile, File("./image.png"))  driver.quit() }  

要素のスクリーンショットの取得

現在のブラウジング コンテキストの要素のスクリーンショットをキャプチャするために使います。 WebDriver エンドポイントの スクリーンショット は、 Base64 形式でエンコードされたスクリーンショットを返します。

import org.apache.commons.io.FileUtils; import org.openqa.selenium.*; import org.openqa.selenium.chrome.ChromeDriver; import java.io.File; import java.io.IOException;  public class SeleniumelementTakeScreenshot {  public static void main(String args[]) throws IOException {  WebDriver driver = new ChromeDriver();  driver.get("https://www.example.com");  WebElement element = driver.findElement(By.cssSelector("h1"));  File scrFile = element.getScreenshotAs(OutputType.FILE);  FileUtils.copyFile(scrFile, new File("./image.png"));  driver.quit();  } }  
from selenium import webdriver from selenium.webdriver.common.by import By  driver = webdriver.Chrome()   # Navigate to url driver.get("http://www.example.com")  ele = driver.find_element(By.CSS_SELECTOR, 'h1')   # Returns and base64 encoded string into image ele.screenshot('./image.png')  driver.quit()  
 using OpenQA.Selenium;  using OpenQA.Selenium.Chrome;  using OpenQA.Selenium.Support.UI;   // Webdriver  var driver = new ChromeDriver();  driver.Navigate().GoToUrl("http://www.example.com");   // Fetch element using FindElement  var webElement = driver.FindElement(By.CssSelector("h1"));   // Screenshot for the element  var elementScreenshot = (webElement as ITakesScreenshot).GetScreenshot();  elementScreenshot.SaveAsFile("screenshot_of_element.png");  
 # Works with Selenium4-alpha7 Ruby bindings and above require 'selenium-webdriver' driver = Selenium::WebDriver.for :chrome  begin  driver.get 'https://example.com/'  ele = driver.find_element(:css, 'h1')   # Takes and Stores the element screenshot in specified path  ele.save_screenshot('./image.jpg') end  
 let header = await driver.findElement(By.css('h1'));  // Captures the element screenshot  let encodedString = await header.takeScreenshot(true);  // save screenshot as below  // await fs.writeFileSync('./image.png', encodedString, 'base64'); 
import org.apache.commons.io.FileUtils import org.openqa.selenium.chrome.ChromeDriver import org.openqa.selenium.* import java.io.File  fun main() {  val driver = ChromeDriver()  driver.get("https://www.example.com")  val element = driver.findElement(By.cssSelector("h1"))  val scrFile: File = element.getScreenshotAs(OutputType.FILE)  FileUtils.copyFile(scrFile, File("./image.png"))  driver.quit() }  

スクリプトの実行

選択したフレームまたはウィンドウの現在のコンテキストで、JavaScript コードスニペットを実行します。

 //Creating the JavascriptExecutor interface object by Type casting  JavascriptExecutor js = (JavascriptExecutor)driver;  //Button Element  WebElement button =driver.findElement(By.name("btnLogin"));  //Executing JavaScript to click on element  js.executeScript("arguments[0].click();", button);  //Get return value from script  String text = (String) js.executeScript("return arguments[0].innerText", button);  //Executing JavaScript directly  js.executeScript("console.log('hello world')");  
 # Stores the header element header = driver.find_element(By.CSS_SELECTOR, "h1")   # Executing JavaScript to capture innerText of header element driver.execute_script('return arguments[0].innerText', header)  
 //creating Chromedriver instance IWebDriver driver = new ChromeDriver(); //Creating the JavascriptExecutor interface object by Type casting IJavaScriptExecutor js = (IJavaScriptExecutor) driver; //Button Element IWebElement button = driver.FindElement(By.Name("btnLogin")); //Executing JavaScript to click on element js.ExecuteScript("arguments[0].click();", button); //Get return value from script String text = (String)js.ExecuteScript("return arguments[0].innerText", button); //Executing JavaScript directly js.ExecuteScript("console.log('hello world')");  
 # Stores the header element header = driver.find_element(css: 'h1')   # Get return value from script result = driver.execute_script("return arguments[0].innerText", header)   # Executing JavaScript directly driver.execute_script("alert('hello world')")  
 // Stores the header element  let header = await driver.findElement(By.css('h1'));   // Executing JavaScript to capture innerText of header element  let text = await driver.executeScript('return arguments[0].innerText', header);
// Stores the header element val header = driver.findElement(By.cssSelector("h1"))  // Get return value from script val result = driver.executeScript("return arguments[0].innerText", header)  // Executing JavaScript directly driver.executeScript("alert('hello world')")  

ページの印刷

ブラウザ内の現在のページを印刷します。

Note: Chromium ブラウザがヘッドレスモードである必要があります。

 import org.openqa.selenium.print.PrintOptions;   driver.get("https://www.selenium.dev");  printer = (PrintsPage) driver;   PrintOptions printOptions = new PrintOptions();  printOptions.setPageRanges("1-2");   Pdf pdf = printer.print(printOptions);  String content = pdf.getContent();  
 from selenium.webdriver.common.print_page_options import PrintOptions   print_options = PrintOptions()  print_options.page_ranges = ['1-2']   driver.get("printPage.html")   base64code = driver.print_page(print_options)  
 // code sample not available please raise a PR  
 driver.navigate_to 'https://www.selenium.dev'   base64encodedContent = driver.print_page(orientation: 'landscape')  
 await driver.get('https://www.selenium.dev/selenium/web/alerts.html');  let base64 = await driver.printPage({pageRanges: ["1-2"]});  // page can be saved as a PDF as below  // await fs.writeFileSync('./test.pdf', base64, 'base64'); 
 driver.get("https://www.selenium.dev")  val printer = driver as PrintsPage   val printOptions = PrintOptions()  printOptions.setPageRanges("1-2")   val pdf: Pdf = printer.print(printOptions)  val content = pdf.content  

7 - Virtual Authenticator

A representation of the Web Authenticator model.

Page being translated from English to Japanese. Do you speak Japanese? Help us to translate it by sending us pull requests!

Web applications can enable a public key-based authentication mechanism known as Web Authentication to authenticate users in a passwordless manner. Web Authentication defines APIs that allows a user to create a public-key credential and register it with an authenticator. An authenticator can be a hardware device or a software entity that stores user’s public-key credentials and retrieves them on request.

As the name suggests, Virtual Authenticator emulates such authenticators for testing.

Virtual Authenticator Options

A Virtual Authenticatior has a set of properties. These properties are mapped as VirtualAuthenticatorOptions in the Selenium bindings.

 public void testVirtualOptions() {  VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions()  .setIsUserVerified(true)  .setHasUserVerification(true)  .setIsUserConsenting(true)  .setTransport(VirtualAuthenticatorOptions.Transport.USB)  .setProtocol(VirtualAuthenticatorOptions.Protocol.U2F)
 // Create virtual authenticator options  VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions()  .SetIsUserVerified(true)  .SetHasUserVerification(true)  .SetIsUserConsenting(true)  .SetTransport(VirtualAuthenticatorOptions.Transport.USB)  .SetProtocol(VirtualAuthenticatorOptions.Protocol.U2F)  .SetHasResidentKey(false);
 options = VirtualAuthenticatorOptions()  options.is_user_verified = True  options.has_user_verification = True  options.is_user_consenting = True  options.transport = VirtualAuthenticatorOptions.Transport.USB  options.protocol = VirtualAuthenticatorOptions.Protocol.U2F  options.has_resident_key = False
 options.setHasUserVerification(true);  options.setIsUserConsenting(true);  options.setTransport(Transport['USB']);  options.setProtocol(Protocol['U2F']);  options.setHasResidentKey(false);   assert(Object.keys(options).length === 6);

Add Virtual Authenticator

It creates a new virtual authenticator with the provided properties.

 public void testCreateAuthenticator() {  VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions()  .setProtocol(VirtualAuthenticatorOptions.Protocol.U2F)  .setHasResidentKey(false);   VirtualAuthenticator authenticator =
 // Create virtual authenticator options  VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions()  .SetProtocol(VirtualAuthenticatorOptions.Protocol.U2F)  .SetHasResidentKey(false);   // Register a virtual authenticator  ((WebDriver)driver).AddVirtualAuthenticator(options);   List<Credential> credentialList = ((WebDriver)driver).GetCredentials();
 options = VirtualAuthenticatorOptions()  options.protocol = VirtualAuthenticatorOptions.Protocol.U2F  options.has_resident_key = False   # Register a virtual authenticator  driver.add_virtual_authenticator(options)
 options.setProtocol(Protocol['U2F']);  options.setHasResidentKey(false);   // Register a virtual authenticator  await driver.addVirtualAuthenticator(options);

Remove Virtual Authenticator

Removes the previously added virtual authenticator.

 VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions()  .SetProtocol(VirtualAuthenticatorOptions.Protocol.U2F)  .SetHasResidentKey(false);   String virtualAuthenticatorId = ((WebDriver)driver).AddVirtualAuthenticator(options);   ((WebDriver)driver).RemoveVirtualAuthenticator(virtualAuthenticatorId);
 options = VirtualAuthenticatorOptions()   # Register a virtual authenticator  driver.add_virtual_authenticator(options)   # Remove virtual authenticator  driver.remove_virtual_authenticator()
 await driver.addVirtualAuthenticator(options);  await driver.removeVirtualAuthenticator();

Create Resident Credential

Creates a resident (stateful) credential with the given required credential parameters.

  byte[] credentialId = {1, 2, 3, 4};  byte[] userHandle = {1};  Credential residentCredential = Credential.createResidentCredential(
 byte[] credentialId = { 1, 2, 3, 4 };  byte[] userHandle = { 1 };   Credential residentCredential = Credential.CreateResidentCredential(  credentialId, "localhost", base64EncodedPK, userHandle, 0);
 # parameters for Resident Credential  credential_id = bytearray({1, 2, 3, 4})  rp_id = "localhost"  user_handle = bytearray({1})  privatekey = urlsafe_b64decode(BASE64__ENCODED_PK)  sign_count = 0   # create a resident credential using above parameters  resident_credential = Credential.create_resident_credential(credential_id, rp_id, user_handle, privatekey, sign_count)
 options.setProtocol(Protocol['CTAP2']);  options.setHasResidentKey(true);  options.setHasUserVerification(true);  options.setIsUserVerified(true);   await driver.addVirtualAuthenticator(options);   let residentCredential = new Credential().createResidentCredential(  new Uint8Array([1, 2, 3, 4]),  'localhost',  new Uint8Array([1]),  Buffer.from(BASE64_ENCODED_PK, 'base64').toString('binary'),  0);   await driver.addCredential(residentCredential);

Create Non-Resident Credential

Creates a resident (stateless) credential with the given required credential parameters.

  byte[] credentialId = {1, 2, 3, 4};  Credential nonResidentCredential = Credential.createNonResidentCredential(
 byte[] credentialId = { 1, 2, 3, 4 };   Credential nonResidentCredential = Credential.CreateNonResidentCredential(  credentialId, "localhost", base64EncodedEC256PK, 0);
 # parameters for Non Resident Credential  credential_id = bytearray({1, 2, 3, 4})  rp_id = "localhost"  privatekey = urlsafe_b64decode(BASE64__ENCODED_PK)  sign_count = 0   # create a non resident credential using above parameters  credential = Credential.create_non_resident_credential(credential_id, rp_id, privatekey, sign_count)
 let nonResidentCredential = new Credential().createNonResidentCredential(  new Uint8Array([1, 2, 3, 4]),  'localhost',  Buffer.from(base64EncodedPK, 'base64').toString('binary'),  0);

Add Credential

Registers the credential with the authenticator.

 public void testCreateAndAddNonResidentialKey() {  VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions()  .setProtocol(VirtualAuthenticatorOptions.Protocol.U2F)  .setHasResidentKey(false);   VirtualAuthenticator authenticator = ((HasVirtualAuthenticator) driver).addVirtualAuthenticator(options);   byte[] credentialId = {1, 2, 3, 4};  Credential nonResidentCredential = Credential.createNonResidentCredential(  credentialId, "localhost", ec256PrivateKey, /*signCount=*/0);
 VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions()  .SetProtocol(VirtualAuthenticatorOptions.Protocol.U2F)  .SetHasResidentKey(false);   ((WebDriver)driver).AddVirtualAuthenticator(options);   byte[] credentialId = { 1, 2, 3, 4 };   Credential nonResidentCredential = Credential.CreateNonResidentCredential(  credentialId, "localhost", base64EncodedEC256PK, 0);   ((WebDriver)driver).AddCredential(nonResidentCredential);
 driver.add_credential(credential)
 options.setProtocol(Protocol['U2F']);  options.setHasResidentKey(false);   await driver.addVirtualAuthenticator(options);   let nonResidentCredential = new Credential().createNonResidentCredential(  new Uint8Array([1, 2, 3, 4]),  'localhost',  Buffer.from(base64EncodedPK, 'base64').toString('binary'),  0);   await driver.addCredential(nonResidentCredential);

Get Credential

Returns the list of credentials owned by the authenticator.

 public void testGetCredential() {  VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions()  .setProtocol(VirtualAuthenticatorOptions.Protocol.CTAP2)  .setHasResidentKey(true)  .setHasUserVerification(true)  .setIsUserVerified(true);  VirtualAuthenticator authenticator = ((HasVirtualAuthenticator) driver).addVirtualAuthenticator(options);   byte[] credentialId = {1, 2, 3, 4};  byte[] userHandle = {1};  Credential residentCredential = Credential.createResidentCredential(  credentialId, "localhost", rsaPrivateKey, userHandle, /*signCount=*/0);   authenticator.addCredential(residentCredential); 
 VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions()  .SetProtocol(Protocol.CTAP2)  .SetHasResidentKey(true)  .SetHasUserVerification(true)  .SetIsUserVerified(true);   ((WebDriver)driver).AddVirtualAuthenticator(options);   byte[] credentialId = { 1, 2, 3, 4 };  byte[] userHandle = { 1 };   Credential residentCredential = Credential.CreateResidentCredential(  credentialId, "localhost", base64EncodedPK, userHandle, 0);   ((WebDriver)driver).AddCredential(residentCredential);   List<Credential> credentialList = ((WebDriver)driver).GetCredentials();
 credential_list = driver.get_credentials()
 options.setProtocol(Protocol['CTAP2']);  options.setHasResidentKey(true);  options.setHasUserVerification(true);  options.setIsUserVerified(true);   await driver.addVirtualAuthenticator(options);   let residentCredential = new Credential().createResidentCredential(  new Uint8Array([1, 2, 3, 4]),  'localhost',  new Uint8Array([1]),  Buffer.from(BASE64_ENCODED_PK, 'base64').toString('binary'),  0);   await driver.addCredential(residentCredential);   let credentialList = await driver.getCredentials();

Remove Credential

Removes a credential from the authenticator based on the passed credential id.

 ((WebDriver)driver).AddVirtualAuthenticator(new VirtualAuthenticatorOptions());   byte[] credentialId = { 1, 2, 3, 4 };   Credential nonResidentCredential = Credential.CreateNonResidentCredential(  credentialId, "localhost", base64EncodedEC256PK, 0);   ((WebDriver)driver).AddCredential(nonResidentCredential);   ((WebDriver)driver).RemoveCredential(credentialId);
 public void testRemoveCredential() {  VirtualAuthenticator authenticator =  ((HasVirtualAuthenticator) driver).addVirtualAuthenticator(new VirtualAuthenticatorOptions());   byte[] credentialId = {1, 2, 3, 4};  Credential credential = Credential.createNonResidentCredential(  credentialId, "localhost", rsaPrivateKey, 0);   authenticator.addCredential(credential); 
 driver.remove_credential(credential.id)

Remove All Credentials

Removes all the credentials from the authenticator.

 public void testRemoveAllCredentials() {  VirtualAuthenticator authenticator =  ((HasVirtualAuthenticator) driver).addVirtualAuthenticator(new VirtualAuthenticatorOptions());   byte[] credentialId = {1, 2, 3, 4};  Credential residentCredential = Credential.createNonResidentCredential(  credentialId, "localhost", rsaPrivateKey, /*signCount=*/0);   authenticator.addCredential(residentCredential); 
 ((WebDriver)driver).AddVirtualAuthenticator(new VirtualAuthenticatorOptions());   byte[] credentialId = { 1, 2, 3, 4 };   Credential nonResidentCredential = Credential.CreateNonResidentCredential(  credentialId, "localhost", base64EncodedEC256PK, 0);   ((WebDriver)driver).AddCredential(nonResidentCredential);   ((WebDriver)driver).RemoveAllCredentials();
 driver.remove_all_credentials()
 await driver.addVirtualAuthenticator(options);   let nonResidentCredential = new Credential().createNonResidentCredential(  new Uint8Array([1, 2, 3, 4]),  'localhost',  Buffer.from(BASE64_ENCODED_PK, 'base64').toString('binary'),  0);   await driver.addCredential(nonResidentCredential);  await driver.removeAllCredentials();

Set User Verified

Sets whether the authenticator will simulate success or fail on user verification.

 public void testSetUserVerified() {  VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions()
 VirtualAuthenticatorOptions options = new VirtualAuthenticatorOptions()  .SetIsUserVerified(true);
 # Create virtual authenticator options  options = VirtualAuthenticatorOptions()  options.is_user_verified = True
 options.setIsUserVerified(true);