API リファレンス

ブラウザー・テスト API の参照情報を表示できます。

アクション

このブラウザー・テスト API 関数は、 WebDriverを使用して新しいアクション・シーケンスを作成します。 コード内で Actions.perform() 関数を呼び出すまで、シーケンスは実行依頼されません。

使用法

$browser.actions().sendKeys("synthetic").perform();

パラメーター

パラメーター タイプ 説明
RETURN Actions このインスタンスの新規アクション・シーケンス。
options Object 「アクション」 シーケンスの構成オプション。

例 1: クリックするには、以下のコードを使用します。

const element = await $browser.waitForAndFindElement(by, timeout);
$browser.actions().move({origin: element}).press().release().perform();

例 2: ブラウザー・エレメントの上にマウスを移動するには、以下のコードを使用します。

const element = await $browser.waitForAndFindElement(by, timeout);
$browser.actions().move({origin: element, duration: 2000}).perform();

mouseMove 機能と互換性を持たせるには、以下のコマンドを使用します。

$browser.actions().mouseMove(element).perform();

ブラウザー・テスト API は、以前のバージョンとの互換性のために $browser.actions().mouseMove() メソッドをサポートし、 $browser.actions().move() を使用してこのメソッドを実装します。これは、この PRでこのメソッドが 2021 年に Selenium によって削除されたためです。

例 3: 鍵を送信するには、以下のコードを実行します。

await $browser.get("http://www.bing.com");
await $browser.actions().sendKeys("synthetic").perform();

addHeader

このブラウザテストAPIは HTTP リクエストのヘッダーを変更する。

使用法

$browser.addHeader(key: string, val: string): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 戻り値は promise です。
key string HTTP ヘッダー名。
val string HTTP ヘッダーの値。

await $browser.addHeader(
  "User-Agent",
  "Mozilla/5.0 (iPhone; CPU OS 10_15_5 (Ergänzendes Update) like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Mobile/14E304 Safari/605.1.15"
);

await $browser.get("https://www.yahoo.com/");
await $browser.takeScreenshot();

await $browser.addHeader(
  "User-Agent",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.16; rv:86.0) Gecko/20100101 Firefox/86.0"
);

await $browser.get("https://www.yahoo.com/");
await $browser.takeScreenshot();

addHeaders

このブラウザテストAPIは HTTP リクエストのヘッダーを変更する。

使用法

$browser.addHeaders(headers: { [key: string]: string }): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 戻り値は promise です。
headers { [key: string]: string } HTTPヘッダー

await $browser.addHeaders({
  key1: "val1",
  key2: "val2",
});

addHostnamesToDenylist

このブラウザー・テスト API は、ホスト名を拒否リストに追加します。

使用法

$browser.addHostnamesToDenylist(hostnameArr: string[]): Promise<void>

Instanaは URL フィルタリングのために addHostnamesToDenylist 関数を提供していますが、以前のバージョンとのコードの互換性を確保するために addHostnamesToBlacklist 関数を削除していません。

$browser.addHostnamesToBlacklist(hostnameArr: string[]): Promise<void>

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 戻り値は promise です。
hostnameArr string[] 突き合わせるホスト名、およびワイルドカードをサポートするホスト名

await $browser.addHostnamesToDenylist(["*.css", "*.png"]);
await $browser.addHostnamesToAllowlist(["*"]);

addHostnamesToAllowlist

このブラウザー・テスト API は、許可リストにホスト名を追加します。

使用法

$browser.addHostnamesToAllowlist(hostnameArr: string[]): Promise<void>

Instanaは URL フィルタリングのために addHostnamesToAllowlist 関数を提供していますが、以前のバージョンとのコードの互換性を確保するために addHostnamesToWhitelist 関数を削除していません。

$browser.addHostnamesToWhitelist(hostnameArr: string[]): Promise<void>

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 戻り値は promise です。
hostnameArr string[] 突き合わせるホスト名。ワイルドカードをサポートします。

await $browser.addHostnamesToDenylist(["*.css", "*.png"]);
await $browser.addHostnamesToAllowlist(["*"]);

addHostnameToDenylist

このブラウザー・テスト API は、ホスト名を拒否リストに追加します。

使用法

$browser.addHostnameToDenylist(hostname: string): Promise<void>

Instanaは URL フィルタリングのために addHostnameToDenylist 関数を提供していますが、以前のバージョンとのコードの互換性を確保するために addHostnameToBlacklist 関数を削除していません。

$browser.addHostnameToBlacklist(hostname: string): Promise<void>

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 戻り値は promise です。
hostname string 突き合わせるホスト名、およびワイルドカードをサポートするホスト名

await $browser.addHostnameToDenylist(`*.css`);
await $browser.addHostnameToAllowlist(`*`);

addHostnameToAllowlist

このブラウザー・テスト API は、許可リストにホスト名を追加します。

使用法

$browser.addHostnameToAllowlist(hostname: string): Promise<void>

Instanaは URL フィルタリングのために addHostnameToAllowlist 関数を提供していますが、以前のバージョンとのコードの互換性を確保するために addHostnameToWhitelist 関数を削除していません。

$browser.addHostnameToWhitelist(hostname: string): Promise<void>

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 戻り値は promise です。
hostname string 突き合わせるホスト名。ワイルドカードをサポートします。

await $browser.addHostnameToDenylist(`*.css`);
await $browser.addHostnameToAllowlist(`*`);

clearProxy

このブラウザー・テスト API は、現在のプロキシー構成をクリアまたは削除します。

使用法

$browser.clearProxy(): Promise<void>;

deleteHeader

このブラウザー・テスト API は、ユーザー定義ヘッダーを削除します。

使用法

$browser.deleteHeader(key: string): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> このコマンドの完了時に解決される promise。
key string HTTP ヘッダー名。

await $browser.addHeader('header1-xxx', 'abcd');
await $browser.addHeaders({
    key1: 'val1',
    key2: 'val2',
});
await $browser.deleteHeaders(['key1']);

await $browser.get(`http://localhost:${devport}/header-test`);
let userHeaders: Map<string, any>  = $browser.getHeaders();
console.log("User customized headers: ", [...userHeaders]);
expect(userHeaders.size).toEqual(2);

deleteHeaders

このブラウザー・テスト API は、ユーザー定義ヘッダーを削除します。

使用法

$browser.deleteHeaders: (header: string[]) => Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> このコマンドの完了時に解決される promise。
header string[] HTTP ヘッダー名。

await $browser.addHeader('header1-xxx', 'abcd');
await $browser.addHeaders({
    key1: 'val1',
    key2: 'val2',
});
await $browser.deleteHeaders(['key1']);

await $browser.get(`http://localhost:${devport}/header-test`);
let userHeaders: Map<string, any>  = $browser.getHeaders();
console.log("User customized headers: ", [...userHeaders]);
expect(userHeaders.size).toEqual(2);

deleteHostnameFromDenylist

このブラウザー・テスト API は、拒否リストからホスト名を削除します。

使用法

$browser.deleteHostnameFromDenylist(hostname: string): Promise<void>;

Instanaは URL フィルタリングのために deleteHostnameFromDenylist 関数を提供していますが、以前のバージョンとのコードの互換性を確保するために deleteHostnameFromBlacklist 関数を削除していません。

$browser.deleteHostnameFromBlacklist(hostname: string): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 戻り値は promise です。
hostname string 突き合わせるホスト名。ワイルドカードをサポートします。

deleteHostnameFromAllowlist

このブラウザー・テスト API は、許可リストからホスト名を削除します。

使用法

$browser.deleteHostnameFromAllowlist(hostname: string): Promise<void>;

このコードは deleteHostnameFromAllowlist 関数を API に追加しますが、コードが以前のバージョンと互換性を持つようにするために deleteHostnameFromWhitelist 関数を削除することはありません。

$browser.deleteHostnameFromWhitelist(hostname: string): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 戻り値は promise です。
hostname string 突き合わせるホスト名。ワイルドカードをサポートします。

deleteHostnamesFromDenylist

このブラウザー・テスト API は、拒否リストからホスト名を削除します。

使用法

$browser.deleteHostnamesFromDenylist(hostnameArr: string[]): Promise<void>

Instanaは URL フィルタリングのために deleteHostnamesFromDenylist 関数を提供していますが、以前のバージョンとのコードの互換性を確保するために deleteHostnamesFromBlacklist 関数を削除していません。

$browser.deleteHostnamesFromBlacklist(hostnameArr: string[]): Promise<void>

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 戻り値は promise です。
hostnameArr string[] 突き合わせるホスト名。ワイルドカードをサポートします。

deleteHostnamesFromAllowlist

このブラウザー・テスト API は、許可リストからホスト名を削除します。

使用法

$browser.deleteHostnamesFromAllowlist(hostnameArr: string[]): Promise<void>

Instanaは URL フィルタリングのために deleteHostnamesFromAllowlist 関数を提供していますが、以前のバージョンとのコードの互換性を確保するために deleteHostnamesFromWhitelist 関数を削除していません。

$browser.deleteHostnamesFromWhitelist(hostnameArr: string[]): Promise<void>

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 戻り値は promise です。
hostnameArr string[] 突き合わせるホスト名。ワイルドカードをサポートします。

ドルドル

$$ コマンドは、ページ上の複数のエレメントをフェッチするために findElements コマンドを呼び出すショートカットです。 このコマンドは、エレメント結果を含む配列を返します。 これらの結果には、アクション・コマンドを呼び出すための拡張プロトタイプがあります。

$ または $$ を一緒にチェーニングして、DOM ツリーをナビゲートできます。

特定のエレメントを選択する方法について詳しくは、 CSS セレクターを参照してください。

使用法

$browser.$$(selector);

パラメーター

名前 タイプ 説明
RETURN Promise<WebElement[]> 戻り値は、 WebElementsの配列を使用して解決される promise です。
selector String, Function 特定のエレメントをフェッチするための Selector 関数または JavaScript 関数。

index.html ファイルは以下のとおりです。

<ul id="menu">
  <li><a href="/">Home</a></li>
  <li><a href="/">Developer Guide</a></li>
  <li><a href="/">API</a></li>
  <li><a href="/">Contribute</a></li>
</ul>

$$ を使用して、以下のようにエレメントを検索します。

test("should get text a menu link", async () => {
  const menu = (await $browser.$$("#menu"))[0];
  const li = await menu.$$("li");

  console.log(await li[2].$("a").getText()); // outputs: "API"
});

test("should get text a menu link - JS Function", async () => {
  const text = (
    await $browser.$$(function () {
      // Arrow function is not allowed here.
      return document.querySelectorAll("#menu"); // Element[]
    })
  )[0];

  const li3Text = await (await text.$$("li"))[2].$("a").getText();
  console.log(li3Text); // outputs: "API"
});

$

$ コマンドは、ページ上の単一エレメントをフェッチするために findElement コマンドを呼び出すショートカットです。 このコマンドはオブジェクトを戻します。 オブジェクトには、アクション・コマンドを呼び出すための拡張プロトタイプがあります。

$ または $$ を一緒にチェーニングして、DOM ツリーをナビゲートできます。

特定のエレメントを選択する方法について詳しくは、 CSS セレクターを参照してください。

使用法

$browser.$(selector): WebElementPromise;

パラメーター

名前 タイプ 説明
RETURN WebElementPromise 返される値はWebElementPromise です。
selector String, Function 複数のエレメントをフェッチするためのセレクターまたは JavaScript 関数。

index.html ファイルは以下のとおりです。

<ul id="menu">
  <li><a href="/">Home</a></li>
  <li><a href="/">Developer Guide</a></li>
  <li><a href="/">API</a></li>
  <li><a href="/">Contribute</a></li>
</ul>

次のように $を使用してエレメントを検索します。

test("should get text a menu link", async () => {
  const text = await $browser.$("#menu").$$("li");
  console.log(await text[2].$("a").getText()); // outputs: "API"
});

test("should get text a menu link - JS Function", async () => {
  const text = await $browser.$(function () {
      // Arrow function is not allowed here.
      return document.querySelector("#menu"); // Element
    }).$$("li");

  console.log(text.$$("li")[2].$("a").getText()); // outputs: "API"
});

実行

このブラウザー・テスト API は、 WebDriverの command.Executor を使用して、提供されている [Command] を実行します。

使用法

$browser.execute(command) => Promise<T>

Promise<T> は、コマンド結果で解決される promise です。

パラメーター

パラメーター タイプ 説明
command Command スケジュールするコマンド

executeAsyncScript

このブラウザー・テスト API は、現在選択されているフレームまたはウィンドウのコンテキストで非同期 JavaScript のスニペットを実行します。 スクリプト・フラグメントは、匿名関数の本体として実行されます。 スクリプトが関数オブジェクトとして提供されている場合、その関数は、ターゲット・ウィンドウに注入するためにストリングに変換されます。

スクリプトに加えて引数を指定すると、その引数はスクリプト引数として組み込まれ、 arguments オブジェクトを使用して参照できます。 引数には、ブール値、数値、ストリング、または WebElementを指定できます。 配列およびオブジェクトは、各項目が記述されたタイプに従っている場合は、スクリプト引数として使用することもできます。

executeScriptで同期的にJavaScriptを実行するのとは異なり、この関数で実行されるスクリプトは、指定されたコールバックを開始することによって、終了したことを明示的に知らせる必要があります。 このコールバックは、常に最後の引数として実行される関数に注入されるため、 arguments[arguments.length - 1]で参照される可能性があります。 スクリプトのコールバック関数の最初の引数に対してこの関数の戻り値を解決するには、以下のステップを実行します。

  • HTML 要素の場合、値は WebElementに解決されます。
  • NULL および未定義の戻り値は NULL に解決されます。
  • ブール値、数値、およびストリングはそのまま解決されます。
  • 関数は、ストリング表現に解決されます。
  • 配列およびオブジェクトの場合、各メンバー項目は、記述された規則に従って変換されます。

使用法

$browser.executeAsyncScript<T>(script: string|Function, ...var_args: any[]): Promise<T>;

パラメーター

パラメーター タイプ 説明
RETURN Promise.<T> スクリプトの戻り値を使用して解決される promise。
script string, Function 実行するスクリプト。
...args * スクリプトに渡される引数です。

例 1: 現在選択されているウィンドウと同期化されたスリープを実行するには、以下の例に示すようにコマンドを使用します。

const start = new Date().getTime();
$browser.executeAsyncScript(
    "window.setTimeout(arguments[arguments.length - 1], 500);"
  ).then(function () {
    console.log("Elapsed time: " + (new Date().getTime() - start) + " ms");
  });

例 2: テストを Ajax アプリケーションと同期するには、以下の例に示すようにコマンドを使用します。

const button = $browser.$("#compose-button");
button.click();
$browser.executeAsyncScript(
  "var callback = arguments[arguments.length - 1];" +
    "mailClient.getComposeWindowWidget().onload(callback);"
);
$browser.switchTo().frame("composeWidget");
$browser.$("#to").sendKeys("dog@example.com");

例 3: XMLHttpRequest を注入して結果を待機するには、以下のコマンドを使用します。 この例では、注入スクリプトは関数リテラルで指定されています。 このフォーマットを使用すると、関数は注入のためにストリングに変換されます。 そのため、この関数は、テスト対象ページのスコープで定義されていないシンボルを参照してはなりません。

$browser.executeAsyncScript(function () {
    var callback = arguments[arguments.length - 1];
    var xhr = new XMLHttpRequest();
    xhr.open("GET", "/resource/data.json", true);
    xhr.onreadystatechange = function () {
      if (xhr.readyState == 4) {
        callback(xhr.responseText);
      }
    };
    xhr.send("");
  }).then(function (str) {
    console.log(JSON.parse(str)["food"]);
  });

executeScript

このブラウザー・テスト API は、現在選択されているフレームまたはウィンドウのコンテキストで JavaScript のスニペットを実行します。 スクリプト・フラグメントは、匿名関数の本体として実行されます。 スクリプトを関数オブジェクトとして指定すると、その関数はターゲット・ウィンドウへの注入のためにストリングに変換されます。

スクリプトに加えて引数を指定すると、その引数はスクリプト引数として組み込まれ、 arguments オブジェクトを使用して参照される可能性があります。 引数には、ブール値、数値、ストリング、または WebElementを指定できます。 配列およびオブジェクトは、各項目が記述されたタイプに従っている場合は、スクリプト引数として使用することもできます。

スクリプトは、現行ウィンドウからアクセス可能な変数を参照する場合があります。 さらに、スクリプトはウィンドウのコンテキストで実行されるため、現在の文書を参照するために document が使用される場合があります。 グローバル変数は保持されますが、スクリプトの実行終了後に使用可能なローカル変数はありません。

スクリプトに戻り値がある場合、つまり、スクリプトに return ステートメントが含まれている場合は、この関数の戻り値を解決するために以下のステップが実行されます。

  • HTML 要素の場合、値は WebElementに解決されます。
  • NULL および未定義の戻り値は NULL に解決されます。
  • ブール値、数値、およびストリングはそのまま解決されます。
  • 関数は、ストリング表現に解決されます。
  • 配列およびオブジェクトの場合、各メンバー項目は、記述された規則に従って変換されます。

使用法

$browser.executeScript<T>(script: string|Function, ...var_args: any[]): Promise<T>;

パラメーター

パラメーター タイプ 説明
RETURN Promise.<T> スクリプトの戻り値を使用して解決される promise。
script string, Function 実行するスクリプト。
...args * スクリプトに渡される引数です。

findElement

このブラウザー・テスト API は、ページ上の要素を見つけます。 エレメントが見つからない場合、ドライバーは error.NoSuchElementErrorを返します。

使用法

$browser.findElement(locator: Locator): WebElementPromise;

パラメーター

パラメーター タイプ 説明
RETURN WebElementPromise 見つかったエレメントに対してコマンドを発行するために使用できる WebElement 。 エレメントが見つからない場合、エレメントは無効になり、スケジュールされているすべてのコマンドが停止します。
locator By, function 使用するロケーター。

この機能を使用して、ページ上にエレメントが存在するかどうかをテストしてはなりません。 代わりに、findElementsを使う必要がある:

$browser.findElements($driver.By.id("foo"))
  .then((found) => console.log("Element found? %s", !!found.length));

エレメントの検索基準を定義するには、 webdriver.By 名前空間内のいずれかのファクトリーを使用するか、短時間の webdriver.By.Hash オブジェクトとして使用します。 例えば、以下の 2 つのステートメントは同等です。

var e1 = $browser.findElement($driver.By.id("foo"));
var e2 = $browser.findElement({ id: "foo" });

この関数はこのインスタンスを入力とし、WebElement、またはWebElement で解決されるプロミスを返します。 返されたプロミスが'WebElements,'WebDriver'の配列で解決される場合、最初の要素を使用する。 例えば、ページ上の最初の可視リンクを検索するには、以下のコマンドを使用できます。

var link = $browser.findElement(firstVisibleLink);

function firstVisibleLink(driver) {
  var links = driver.findElements(By.tagName("a"));
  return promise.filter(links, function (link) {
    return link.isDisplayed();
  });
}

findElements

このブラウザー・テスト API は、ページ上の複数の要素を検索します。 エレメント・ロケーターの方針については、「 findElement」を参照してください。

使用法

$browser.findElements(locator: Locator): Promise<WebElement[]>;

パラメーター

パラメーター タイプ 説明
RETURN 約束<WebElement[]>(ウェブ要素 WebElementsの配列を使用して解決される promise。
locator By, function 使用するロケーター。

generateTOTPToken

このブラウザー・テスト API は、TOTP 鍵から時刻ベースのワンタイム・パスワード (TOTP) トークンを生成します。 この API を使用して、2 要素認証でログインできます。

使用法

$browser.generateTOTPToken(key: string, options?: TOTPOptions): string;

パラメーター

パラメーター タイプ 説明
RETURN string 時刻ベースのワンタイム・パスワード (TOTP) トークン
key string TOTP キー、 base32 ストリング
options Object,undefined オプション: オプション設定 (例: {digits: 8, algorithm: "SHA-512", period: 60})。 デフォルト設定は {digits: 6, algorithm: "SHA-1", period: 30} です。

例 1: TOTP トークンを生成し、ブラウザー・スクリプト・テストで 2 要素認証を使用してログインするには、以下のようにします。

await $browser.waitForAndFindElement($driver.By.id("password"), 15000);

let totp_token = $browser.generateTOTPToken($secure.totpKey);

await $browser.findElement($driver.By.id("password")).then((element) => {
  return element.clear().then(() => {
    return element.sendKeys(totp_token);
  });
});

例 2: Selenium SIDE スクリプト・テストで TOTP トークンを生成するには、以下のようにします。

{
  "id": "ec51296b-4d16-4167-ac83-ba87f89cc0c7",
  "comment": "Generate a TOTP token from a TOTP key",
  "command": "executeScript",
  "target": "return $browser.generateTOTPToken($secure.totpKey);",
  "targets": [],
  "value": "totpToken"
}

取得

このブラウザーテストAPIは URLにアクセスする。

使用法

$browser.get(url: string): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 文書のロードが終了したときに解決される promise。
url string 開く完全修飾 URL。

getAllWindowHandles

このブラウザー・テスト API は、使用可能なウィンドウ・ハンドルの現在のリストを取得するコマンドをスケジュールします。

使用法

$browser.getAllWindowHandles(): Promise<string[]>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<string[]> ウィンドウ・ハンドルの配列を使用して解決される promise。

getCapabilities

このブラウザー・テスト API は、このインスタンスの機能を取得します。

使用法

$browser.getCapabilities(): Promise<Capabilities>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<Capabilities> このインスタンスの機能によって解決される promise。

getCurrentUrl

このブラウザテストAPIは、現在のページの URLを取得するコマンドをスケジュールする。

使用法

$browser.getCurrentUrl(): Promise<string>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<string> 現在の URLで解決される約束。

getHeaders

このブラウザー・テスト API は、ユーザーがカスタマイズしたヘッダーを取得します。

使用法

$browser.getHeaders(): Map<string, any>;

パラメーター

パラメーター タイプ 説明
RETURN Map<string, any> ユーザー定義ヘッダー

await $browser.addHeader('header1-xxx', 'abcd');
await $browser.addHeaders({
    key1: 'val1',
    key2: 'val2',
});
await $browser.deleteHeaders(['key1']);

await $browser.get(`http://localhost:${devport}/header-test`);
let userHeaders: Map<string, any>  = $browser.getHeaders();
console.log("User customized headers: ", [...userHeaders]);
expect(userHeaders.size).toEqual(2);

getPageSource

このブラウザー・テスト API は、現行ページのソースを取得します。 返されるソースは、基礎となる DOM の表現です。 Web サーバーから送信される未加工の応答と同じ方法でソースがフォーマットまたはエスケープされることを想定しないでください。

使用法

$browser.getPageSource(): Promise<string>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<string> 現在のページ・ソースで解決される promise。

getProxy

このブラウザー・テスト API は、現在のプロキシー構成を取得します。

使用法

$browser.getProxy(): FFProxyConfig | CProxyConfig;

この API は、 $network オブジェクトを介して呼び出すこともできます。

$network.getProxy(): FFProxyConfig | CProxyConfig;

パラメーター

パラメーター タイプ 説明
RETURN CProxyConfig または FFProxyConfig プロキシー構成オブジェクト (Chrome または Firefox 固有のカプセル化)。

プロキシー構成

/**
 * Firefox extension - An object encapsulating a complete proxy configuration
 * https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/proxy/settings
 */
export interface FFProxyConfig {
  proxyType?: FFProxyType,
  http?: string;
  ssl?: string,
  ftp?: string;
  autoConfigUrl?: string,
  autoLogin?: boolean,
  httpProxyAll?: boolean,
  passthrough?: string,
  proxyDNS?: boolean,
  socks?: string,
  socksVersion?: number,
}

/**
 * Chrome extension - An object encapsulating a complete proxy configuration
 * https://developer.chrome.com/docs/extensions/reference/proxy/#type-ProxyConfig
 */
export interface CProxyConfig {
  mode: CProxyType,
  rules?: {
    bypassList?: string[],
    fallbackProxy?: ProxyServer,
    proxyForFtp?: ProxyServer,
    proxyForHttp?: ProxyServer,
    proxyForHttps?: ProxyServer,
    singleProxy?: ProxyServer,
  },
  pacScript?: {
    data?: string,
    mandatory?: boolean,
    url?: string,
  },
};

getSession

このブラウザー・テスト API は、このクライアントのセッションを取得します。

使用法

$browser.getSession(): Promise<Session>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<Session> このクライアントのセッションの約束。

getTitle

このブラウザー・テスト API は、現行ページのタイトルを取得するコマンドをスケジュールします。

使用法

$browser.getTitle(): Promise<string>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<string> 現在のページのタイトルを使用して解決される promise。

getWindowHandle

このブラウザー・テスト API は、現行ウィンドウ・ハンドルを取得するコマンドをスケジュールします。

使用法

$browser.getWindowHandle(): Promise<string>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<string> 現行ウィンドウ・ハンドルを使用して解決される promise。

管理

このブラウザー・テスト API は、このインスタンスのオプション・インターフェースを取得します。

使用法

$browser.manage(): Options;

パラメーター

パラメーター タイプ 説明
RETURN Options このインスタンスのオプション・インターフェース。

オプション

これらのオプションは、ブラウザーおよびドライバーの状態を管理するためのメソッドを提供します。

タイプ 説明
addCookie(spec: IWebDriverOptionsCookie): Promise<void> cookieを追加するコマンドをスケジュールします。
deleteAllCookies(): Promise<void>; 現在のページに表示されているすべての Cookie を削除するコマンドをスケジュールします。
deleteCookie(name: string): Promise<void>; 指定された名前の Cookie を削除するコマンドをスケジュールします。 指定された名前の Cookie が現行ページに表示されない場合、このコマンドはノーオペレーションです。
getCookies(): Promise<IWebDriverCookie[]>; 現行ページに表示されるすべての Cookie を取得するコマンドをスケジュールします。 各 Cookie は、 WebDriver ワイヤー・プロトコルによって記述された JSON オブジェクトとして返されます。
getCookie(name: string): Promise<IWebDriverCookie>; 指定された名前の cookie を取得するコマンドをスケジュールします。 そのような Cookie が使用できない場合は、NULL を返します。 WebDriver ワイヤー・プロトコルによって記述されているように、Cookie は JSON オブジェクトとして返されます。
logs(): Logs; ドライバー・ログを管理するためのインターフェースを提供します。
getTimeouts(): Promise<ITimeouts>; 現在の timeoutsを取得します。
setTimeouts(timeouts: ITimeouts): Promise<void>; 現在の timeoutsを設定します。
window(): Window; 現在の ウィンドウを管理するためのインターフェースを提供します。

IWebDriverCookie

パラメーター タイプ 説明
name string Cookie の名前です。
value string Cookie の値。
path string Cookie パス。 Cookie が追加されると、デフォルトで「/」に設定されます。
domain string Cookie が表示されるドメイン。 クッキーが追加されたときのデフォルトは、現在の閲覧コンテキストのドキュメントの URL です。
secure boolean このパラメーターは、Cookie がセキュア Cookie であるかどうかを示します。 デフォルト値は falseです。これは、Cookie がセキュア Cookie ではないことを意味します。
httpOnly boolean このパラメータは、クッキーが HTTP 専用クッキーであるかどうかを示す。 デフォルト値は false で、これはクッキーが HTTP 専用ではないことを意味します。
expiry number ブラウザーから Cookie を取得する場合、有効期限は常にエポック以降の秒数で返されます。

ITタイムアウト

パラメーター タイプ 説明
script number 評価済みスクリプトの実行を待機する最大時間を指定します。
pageLoad number ページのロードが終了するまで待機する最大時間を指定します。 デフォルトは 300000 ミリ秒です。
implicit number ページ上のエレメントを見つけるときに、エレメント・ロケーターが成功するのを待機する最大時間を指定します。 デフォルトは 0 ミリ秒です。

ウィンドウ

export interface ILocation {
  x: number;
  y: number;
}

export interface ISize {
  width: number;
  height: number;
}

export interface IRectangle {
  x: number;
  y: number;
  width: number;
  height: number;
}

現行ウィンドウを管理するためのインターフェース。

タイプ 説明
getPosition(): Promise<ILocation>; 画面の左上を基準にして、ウィンドウの現在位置を検索します。
setPosition(x: number, y: number): Promise<void>; 現行ウィンドウを位置変更します。
getSize(): Promise<ISize>; ウィンドウの現行サイズを検索します。
setSize(width: number, height: number): Promise<void>; 現行ウィンドウのサイズを変更します。
getRect(): Promise<IRectangle>; 現在の最上位ウィンドウのサイズと位置を戻します。
setRect({x, y, width, height}: Partial<IRectangle>): Promise<IRectangle>; 現在の最上位ウィンドウのサイズと位置を設定します。 xy を省略してサイズのみを更新することも、 widthheight のオプションを省略して位置のみを更新することもできます。
maximize(): Promise<void>; 現行ウィンドウを最大化します。

let tm = await $browser.manage().getTimeouts();
console.log('current timeout', tm.implicit, tm.pageLoad, tm.script);

await $browser.manage().timeouts().pageLoadTimeout(119);
tm = await $browser.manage().getTimeouts();
expect(tm.pageLoad).toBe(119);
console.log('current timeout', tm.implicit, tm.pageLoad, tm.script);

await $browser.manage().timeouts().pageLoadTimeout(89);
tm = await $browser.manage().getTimeouts();
expect(tm.pageLoad).toBe(89);
console.log('current timeout', tm.implicit, tm.pageLoad, tm.script);

このブラウザー・テスト API は、このインスタンスのナビゲーション・インターフェースを取得します。

使用法

$browser.navigate(): Navigation;

パラメーター

パラメーター タイプ 説明
RETURN Navigation このインスタンスのナビゲーション・インターフェース。

ブラウザー履歴で前後に移動するためのナビゲーション・インターフェース。

タイプ 説明
to(url: string): Promise<void>; 新しい URLに移動するコマンドをスケジュールする。
back(): Promise<void>; ブラウザー履歴で後方に移動するコマンドをスケジュールします。
forward(): Promise<void>; ブラウザー履歴で前方に移動するコマンドをスケジュールします。
refresh(): Promise<void>; 現行ページを最新表示するコマンドをスケジュールします。

setAuthentication

このブラウザテストAPIは、来る HTTP リクエストの認証設定を変更する。

使用法

$browser.setAuthentication(authName: string, authPass: string): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 設定が適用されると、promise が解決されます。
authName string 認証用のユーザー名。
authPass string 認証用のユーザー・パスワード。

await $browser.setAuthentication(basicauthuser, password);
await $browser.get(`http://${httpserver}/basic/page1.html`)
.then(() => $browser.takeScreenshot());

setProxy

このブラウザテストAPIは、すべての HTTP、 HTTPS、FTPリクエストに使用されるプロキシサーバーを設定します。

使用法

$browser.setProxy(proxyURL: string | URL, noProxy?: string): Promise<void>;

この API は、 $network オブジェクトを介して呼び出すこともできます。

$network.setProxy(proxyURL: string | URL, noProxy?: string): Promise<void>

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 設定が適用されると、promise が解決されます。
proxyURL string, URL プロキシサーバーに接続するための URL 文字列。 URL 文字列は Nodeの url.parse ( urlString )メソッドで定義されているフォーマットでなければなりません。 例えば、 http://proxy_host:8888 または https://user:pass@proxy_host:8888 です。
noProxy string オプション: すべてのプロキシーをバイパスするホストの、コンマ区切りのリスト。

setProxyAdvanced

このブラウザー・テスト API は、プロキシー処理のために Chrome または Firefox Extension API でサポートされている形式を使用して、プロキシー構成を設定します。

使用法

$browser.setProxyAdvanced(proxyConfig: CProxyConfig | FFProxyConfig, authName?: string, authPass?: string): Promise<void>;

この API は、 $network オブジェクトを介して呼び出すこともできます。

$network.setProxyAdvanced(proxyConfig: CProxyConfig | FFProxyConfig, authName?: string, authPass?: string): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 設定が適用されると、promise が解決されます。
proxyConfig CProxyConfig または FFProxyConfig Chrome または Firefox に固有のカプセル化でのプロキシー構成オブジェクト。
authName string オプション: 認証用のプロキシー・サーバーのユーザー名。
authPass string オプション: 認証用のプロキシー・サーバーのユーザー・パスワード。

async function testProxyAdvanced() {
  await $browser.clearProxy();
  var ffconfig = {
    proxyType: "manual",
    //proxyType: "autoConfig",
    http: proxy_4,
    ssl: proxy_4,
    ftp: proxy_4,
    autoConfigUrl: pacfile,
    passthrough: noproxy,
    autoLogin: true,
  }

  var pxyserver = {
    host: httpserver,
    port: 8088,
    scheme: "http",
  }

  var cconfig = {
    mode: "fixed_servers",
    rules: {
      bypassList: noproxy.split(','),
      fallbackProxy: {
        host: "my-proxy-server.us.ibm.com",
        port: 8080,
      },
      proxyForFtp: pxyserver,
      proxyForHttp: pxyserver,
      proxyForHttps: pxyserver,
    },
    pacScript: {
      url: pacfile,
    },
  }

  var bname = null;
  await $browser.getCapabilities().then(cap=> {
    bname = cap.getBrowserName();
   });

  var config = (bname == 'chrome') ? cconfig : ffconfig;

  await $browser.setProxyAdvanced(config, proxyuser, password);
  await $browser.get(`http://${httpserver}/demo/page2.html`)
    .then(() => $browser.takeScreenshot());
}

setProxyAuthentication

このブラウザテストAPIは、来る HTTP、 HTTPS、FTPリクエストのプロキシ認証設定を変更する。

使用法

$browser.setProxyAuthentication(authName: string, authPass: string): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 設定が適用されると、promise が解決されます。
authName string 認証用のプロキシー・サーバーのユーザー名。
authPass string 認証用のプロキシー・サーバーのユーザー・パスワード。

async function testProxyAuthentication() {
  await $browser.clearProxy();
  await $browser.setProxy(proxy_3, noproxy);
  await $browser.setProxyAuthentication(proxyuser, password);
  await $browser.get(`http://${httpserver}/demo/page2.html`)
    .then(() => $browser.takeScreenshot());
}

setProxyForHttp

このブラウザテストAPIは、すべての HTTP リクエストに使用されるプロキシサーバーを設定する。

使用法

$browser.setProxyForHttp(proxyURL: string | URL, noProxy?: string): Promise<void>

この API は、 $network オブジェクトを介して呼び出すこともできます。

$network.setProxyForHttp(proxyURL: string | URL, noProxy?: string): Promise<void>

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 設定が適用されると、promise が解決されます。
proxyURL string, URL プロキシサーバーに接続するための URL 文字列。 URL 文字列は Nodeの url.parse ( urlString )メソッドで定義されているフォーマットでなければなりません。 例えば、 http://proxy_host:8888 または https://user:pass@proxy_host:8888 です。
noProxy string オプション: すべてのプロキシーをバイパスする必要があるホストのコンマ区切りリスト。

let website;
let proxyServer = "proxyHost:proxyPort";

console.log(">>>>>>>>>>>>>>>>>>>", "Clear proxy configuration");
await $network.clearProxy();
console.log(">>>>>>>>>>>>>>>>>>>", "Set proxy configuration for HTTP request");
await $network.setProxyForHttp(proxyServer);
website = await accessWebSite();
checkHostname("www.google.com.hk", website)

setProxyForHttps

このブラウザテストAPIは、すべての HTTPS リクエストに使用されるプロキシサーバーを設定する。

使用法

$browser.setProxyForHttps(proxyURL: string | URL, noProxy?: string): Promise<void>;

この API は、 $network オブジェクトを介して呼び出すこともできます。

$network.setProxyForHttps(proxyURL: string | URL, noProxy?: string): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 設定が適用されると promise が解決されます
proxyURL string, URL プロキシサーバーに接続するための URL 文字列。 URL 文字列は Nodeの url.parse ( urlString )メソッドで定義されているフォーマットでなければなりません。 例えば、 http://proxy_host:8888 または https://user:pass@proxy_host:8888 です。
noProxy string オプション: すべてのプロキシーをバイパスする必要があるホストのコンマ区切りリスト。

let website;
let sslProxyServer = "username:password@proxyHost:proxyPort";

console.log(">>>>>>>>>>>>>>>>>>>", "Clear proxy configuration");
await $network.clearProxy();
console.log(">>>>>>>>>>>>>>>>>>>", "Set proxy configuration for HTTPS request");
let testURL = new URL("http://" + sslProxyServer);
await $network.setProxyForHttps(testURL);
website = await accessWebSite();
checkHostname("www.google.com", website);

setProxyPAC

このブラウザー・テスト API は、プロキシー自動構成 (PAC) スクリプトを介してプロキシー・サーバーを設定します。

使用法

$browser.setProxyPAC(pacScriptURL: string, noProxy?: string, authMap?: Map<string, any>): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 設定が適用されると、promise が解決されます。
pacScriptURL string PACスクリプトの URL。
noProxy string オプション: すべてのプロキシーをバイパスする必要があるホストのコンマ区切りリスト。
authMap Map オプション: プロキシー・サーバーに提供される認証資格情報のマップ。プロキシー・サーバーの Hostname によって鍵が設定されます。 このマップの値は、 {username: "authUsername", password: "authPassword"}の形式で定義する必要があります。

const httpserver = '<DemoServerIP>';
const noproxy = "localhost,google.com,192.168.1.0/24";
const pacfile = `http://${httpserver}/pacfile`;
const authmap = new Map([
  [ httpserver, {username: "proxyuser", password: "passw0rd"} ],
  [ "httpserver2", {username: "user1", password: "passw0rd"} ],
])

async function testProxyPAC() {
  await $browser.clearProxy();
  await $browser.setProxyPAC(pacfile, noproxy, authmap);
  await $browser
    .get(`http://${httpserver}/demo/page2.html`)
    .then(() => $browser.takeScreenshot());
}

スリープ

このブラウザー・テスト API は、ドライバーを特定の時間スリープ状態にするコマンドをスケジュールします。

使用法

$browser.sleep(ms: number): Promise<void>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> スリープ終了時に解決される約束。
ms number スリープにかかる時間 (ミリ秒)。

await $browser.get("https://www.yahoo.com/");
await $browser.sleep(3 * 1000);
await $browser.takeScreenshot();

switchTo

このブラウザー・テスト API は、ドライバーのフォーカスを別のフレームまたはウィンドウに変更するためのインターフェースを取得します。

使用法

$browser.switchTo(): TargetLocator;

パラメーター

パラメーター タイプ 説明
RETURN TargetLocator このインスタンスの TargetLocator インターフェース。

TargetLocator

ドライバーのフォーカスを別のフレームまたはウィンドウに変更するためのインターフェース。

インスタンス・メソッド

タイプ 説明
activeElement(): WebElementPromise; 現在の文書の document.activeElement エレメント、または activeElement が使用できない場合は document.body エレメントを取得するコマンドをスケジュールします。
defaultContent(): Promise<void>; 今後のすべてのコマンドのフォーカスをページの最初のフレームに切り替えるコマンドをスケジュールします。 ターゲット・フレームは、以下のいずれかの値として指定できます。
- window.framesに対する (ゼロ・ベースの) 索引を指定する数値。
- frame または iframe DOM エレメントに対応する WebElement 参照。
-ページの一番上のフレームを選択するための null 値。 null を渡すことは、 defaultContentを呼び出すことと同じです。
frame(id: Number |WebElement| null): Promise<void>; 今後のすべてのコマンドのフォーカスをページ上の別のフレームに変更します。
parentFrame(): Promise<void>; 今後のすべてのコマンドのフォーカスを、現在選択されているフレームの親フレームに変更します。 ドライバーが既に最上位のブラウズ・コンテキストにフォーカスしている場合、このコマンドは効果がありません。
window(nameOrHandle: string): Promise<void>; 今後のすべてのコマンドのフォーカスを別のウィンドウに切り替えるコマンドをスケジュールします。 ウィンドウは'window.name属性かハンドル(getWindowHandleで返される)で指定できる。
newWindow(typeHint: string): Promise<void>; ブラウザウィンドウを作成し、このドライバの今後のコマンドのフォーカスを新しいウィンド ウに切り替える。
typeHint 'window' または 'tab'. 作成されたウィンドウは、要求されたタイプであることは保証されません。 ドライバーが要求されたタイプをサポートしない場合、ドライバーがサポートするタイプに関係なく、新しいブラウザー・ウィンドウが作成されます。
ドライバーが新しいウィンドウにフォーカスを変更すると、返された promise が解決されます。
alert(): AlertPromise; window.alert()window.confirm()、および window.prompt()によって開かれたものなど、アクティブなモーダル・ダイアログにフォーカスを変更するコマンドをスケジュールします。 使用可能なオープン・アラートがない場合、返された promise は error.NoSuchAlertError で拒否されます。

/**
 * samples of getting current window handle
 * switch to a new window
 * open new page in new tab
 */
console.log("Windows handle: ", await $browser.getWindowHandle(), "Current url: ", await $browser.getCurrentUrl());
console.log("switch to calendar tab");
let originalWindow = await $browser.getWindowHandle();
await $browser.switchTo().newWindow();

/**
 * navigate to www.timeanddate.com
 * assert page title by getTitle() api
 * assert page title by getPageSource() api
 */
console.log("Access time and date page");
await $browser.get("http://www.timeanddate.com");
let page = await $browser.getPageSource();
assert.isTrue(page.includes("<title>timeanddate.com</title>"));
console.log("Page title: ", await $browser.getTitle());

/**
 * switch back to original window
 * take screenshot
 */
await $browser.switchTo().window(originalWindow);
await $browser.takeScreenshot();

takeScreenshot

このブラウザー・テスト API は、スクリーン・ショットを取得するコマンドをスケジュールします。 ドライバーは、以下の要素のスクリーン・ショットを優先順に返そうとします。

  1. ページ全体
  2. 現行ウィンドウ
  3. 現在のフレームの表示部分
  4. ブラウザーを含む表示全体

使用法

$browser.takeScreenshot(): Promise<string>;

パラメーター

パラメーター タイプ 説明
RETURN Promise<string> base-64 でエンコードされた PNG としてスクリーン・ショットを使用して解決される promise。

待ち

このブラウザー・テスト API は、条件が「真」の値に評価されるのを待機します。 条件は、条件によって、カスタム関数として、または任意の promise 型の thenable として指定できます。

条件または関数の場合、待機は、真の値を返すまで条件を繰り返し評価します。 API が条件を評価している間にエラーが発生した場合、エラーの伝搬が許可されます。 条件が promise を返すと、ポーリング・ループはそれが解決されるまで待機し、解決された値を使用して条件が満たされているかどうかを確認します。 保証の解決時間は、待機がタイムアウトになったかどうかを確認するために常に考慮されます。

指定された条件がWebElementCondition,ある場合、wait はその条件を満たす要素を解決するWebElementPromiseを返します。

使用法

$browser.wait(
    condition: WebElementCondition,
    opt_timeout?: number,
    opt_message?: string): WebElementPromise;

パラメーター

パラメーター タイプ 説明
RETURN Promise<string> 条件関数によって返される、または条件がタイムアウトになった場合に拒否される最初の真の値で解決される promise。 入力条件がWebElementCondition,のインスタンスの場合、返される値はWebElementPromise です。
condition IThenable<(T|null)> または Condition<(T|null)> または function(WebDriver): (T|null) 待機する条件。promise として定義されるか、条件オブジェクトとして定義されるか、条件として評価する関数として定義されます。
opt_timeout number 条件が true になるのを待機する期間 (ミリ秒)。
opt_message stringまたはfunction 待機がタイムアウトになった場合に使用するオプションのメッセージ。

例 1: エレメントがページに表示されるのを最大 10 秒待機するには、以下の例に示すようにコマンドを使用します。

async function example() {
  let button = await $browser.wait(
    $driver.until.elementLocated($driver.By.id("foo")),
    10000
  );
  await button.click();
}

例 2: エレメントを待機してクリックするには、以下の例に示すようにコマンドを使用します。

await $browser.wait(until.elementLocated(by), timeout);
const element = await $browser.findElement(by, timeout);
await $browser.wait(until.elementIsVisible(element), timeout, `${by} not visible`);
await $browser.wait(until.elementIsEnabled(element), timeout, `${by} not enabled`);
await element.click();

waitForAndFindElement

このブラウザー・テスト API は、ページ上のエレメントを待機して検出し、そのエレメントが表示されるのを待機します。 見つからない場合、シンセティック・モニターはエラーを返します。 タイムアウト値はオプションです。 これは、要素を検出するタスクと、その可視性を待機するタスクの両方に個別に適用されます。 したがって、最悪のシナリオでは、このメソッドは、指定されたタイムアウト値の 2 倍まで時間がかかる可能性があります。 デフォルトのタイムアウト値は 1000 ミリ秒 (1 秒) です。

パラメーターで指定されたロケーターを持つエレメントが検出され、そのエレメントが可視になった場合、または指定された timeout内で指定された条件が満たされなかった場合、 WebElementPromise が戻されます。

使用法

$browser.waitForAndFindElement(locator: Locator, timeout?: number) : WebElementPromise;

この関数は以下のようになります。

const element = await $browser.wait(until.elementLocated(locator), timeout);
await $browser.wait(until.elementIsVisible(element), timeout);
return await $browser.findElement(locator);

パラメーター

パラメーター タイプ 説明
RETURN WebElementPromise 見つかったエレメントに対してコマンドを発行するために使用できる WebElement 。 エレメントが見つからない場合、エレメントは無効になり、スケジュールされているすべてのコマンドが停止します。
locator by.By | function 使用するロケーター。
timeout number オプション: 待機する時間の長さ (ミリ秒)。

$browser.waitForAndFindElement($driver.By.id("username"), 10000);

waitForPendingRequests

この関数は、以前のバージョンとの互換性を確保するためのものです。

使用法

$browser.waitForPendingRequests(timeout?: number): Promise<void>;

この関数は、以下のようになります。

let script = "return document.readyState === 'complete'";
await $browser.wait(() => {
    return $browser.executeScript(script);
}, timeout);

パラメーター

パラメーター タイプ 説明
RETURN Promise<void> 文書とすべての副次リソースのロードが終了したときに解決される promise。
timeout number 待機する時間の長さ (ミリ秒)。