概要
Webサービスでテスト用リモートブラウザを操作する際に、Start-SeRemotoメソッドを使用し、リモートブラウザを操作することができます。今回は、TestingBotというリモートブラウザのWebサービスを利用してSafariを利用してみたいと思います。
Webサービスの登録(TestingBot)
TestingBotは、28日間無料で利用することができますので、アカウント登録してトライアル利用します。詳しい登録の方法を知りたい方は、以下「TestingBotアカウント登録」をクリックしてフローを確認してみてください。
TestingBotアカウント登録
TestingBotのトライアルサイトに移り、必要事項を入力していきます。
ちなみに、TestingBotは日本語のサイトもありますが、日本語ページからサインアップ(アカウント登録)しようとしても画面が進みませんでした。
赤枠の箇所を入力します。英語サイトですので、必要事項は全て英語で入力しました。全て記入したら、チェックボックスにチェックを入れ、Sign Upボタンをクリックします。
入力したメールアドレスにアドレス確認のためのメールが送信されます。Confirm your Accountをクリックしてアカウント登録を完了させます。
コマンド(Commond)
Start-SeRemote
代替コマンド(Alias)
無し
構文(Syntax)
Start-SeRemote [[-StartURL] <string>] [-RemoteAddress <string>] [-DesiredCapabilities <hashtable>] [-AsDefaultDriver] [-ImplicitWait <int>] [<CommonParameters>]
オプション
Name | 引数型 | 解説 | Short Example |
---|---|---|---|
StartURL | string | 開きたいページのURLを指定 | Start-SeRemote -RemoteAddress $remoteDriverUrl -DesiredCapabilities $caps -StartURL "https://programan.org" -AsDefaultDriver |
RemoteAddress | string | リモートアクセスするアドレスを指定 | Start-SeRemote -RemoteAddress $remoteDriverUrl -DesiredCapabilities $caps -StartURL "https://programan.org" -AsDefaultDriver |
DesiredCapabilities | hashtable | 利用するブラウザの種類を辞書型で指定 | Start-SeRemote -RemoteAddress $remoteDriverUrl -DesiredCapabilities $caps -StartURL "https://programan.org" -AsDefaultDriver |
AsDefaultDriver | カレントドライバとして設定 | Start-SeRemote -RemoteAddress $remoteDriverUrl -DesiredCapabilities $caps -StartURL "https://programan.org" -AsDefaultDriver | |
ImplicitWait | int | 待機時間の設定 | |
CommonParameters | 共通パラメータ |
※ShortExampleは、動作確認ができたコードを記載しています。
Example
事前準備(KeyとSecretの確認)
TestingBotでブラウザを起動させるため、事前にTestingBotのマイページに移り、KeyとSecretをコピーしておきます。詳しい流れは、以下「KeyとSecretの確認(TestingBot)」をクリックして内容展開してみてください。
KeyとSecretの確認(TestingBot)
TestingBotのマイページホーム画面から右上のメニューより、Accountページに移ります。
アカウントページの上側に掲載されているKeyとSecretをコピーしておきます。
スクリプト実行
以下にTestingBotをStart-SeRemoteで利用する例を紹介します。あらかじめ控えておいたKeyとSecretを1,2行目の変数に入力しておきます。
$key = "<Key>" #TestingBotで登録したKeyを入力
$secret = "<Secret>" #TestingBotで登録したSecretを入力
$RemoteDriverURL = [uri]"http://$key`:$secret@hub.testingbot.com/wd/hub"
$caps = @{
platform = 'HIGH-SIERRA'
version = '11'
browserName = 'safari'
}
Start-SeRemote -RemoteAddress $remoteDriverUrl -DesiredCapabilities $caps -StartURL "https://programan.org" -AsDefaultDriver
$Driver = $Global:SeDriver
$Element = Get-SeElement -Target $Driver -ClassName "newmark"
Invoke-SeClick -Element $Element[0]
Start-Sleep -Seconds 5
Stop-SeDriver $Driver
初回接続に成功したらTestingBotから接続成功のメールが送られてきます。スクリプト実行の結果は、TestingBotのDashboardページから確認できます。動画でサファリのスクレイピングの録画を再生したり、スクレイピングで命令したクリック動作の命令文を時系列で追う事ができます。
Webアプリを開発されている方は、各ブラウザのテスト結果を動画で確認できたり、命令文の結果を追う事ができるので大変便利ですね。
Module
Start-SeRemoteのSelenium-Module構文を以下に掲載します。
function Start-SeRemote {
<#
.example
#you can a remote testing account with testing bot at https://testingbot.com/users/sign_up
#Set $key and $secret and then ...
#see also https://crossbrowsertesting.com/freetrial / https://help.crossbrowsertesting.com/selenium-testing/getting-started/c-sharp/
#and https://www.browserstack.com/automate/c-sharp
$RemoteDriverURL = [uri]"http://$key`:$secret@hub.testingbot.com/wd/hub"
#See https://testingbot.com/support/getting-started/csharp.html for values for different browsers/platforms
$caps = @{
platform = 'HIGH-SIERRA'
version = '11'
browserName = 'safari'
}
Start-SeRemote -RemoteAddress $remoteDriverUrl -DesiredCapabilties $caps
#>
[cmdletbinding(DefaultParameterSetName = 'default')]
param(
[string]$RemoteAddress,
[hashtable]$DesiredCapabilities,
[ValidateURIAttribute()]
[Parameter(Position = 0)]
[string]$StartURL,
[switch]$AsDefaultDriver,
[int]$ImplicitWait = 10
)
$desired = [OpenQA.Selenium.Remote.DesiredCapabilities]::new()
if (-not $DesiredCapabilities.Name) {
$desired.SetCapability('name', [datetime]::now.tostring("yyyyMMdd-hhmmss"))
}
foreach ($k in $DesiredCapabilities.keys) { $desired.SetCapability($k, $DesiredCapabilities[$k]) }
$Driver = [OpenQA.Selenium.Remote.RemoteWebDriver]::new($RemoteAddress, $desired)
if (-not $Driver) { Write-Warning "Web driver was not created"; return }
$Driver.Manage().Timeouts().ImplicitWait = [TimeSpan]::FromSeconds($ImplicitWait)
if ($StartURL) { $Driver.Navigate().GotoUrl($StartURL) }
if ($AsDefaultDriver) {
if ($Global:SeDriver) { $Global:SeDriver.Dispose() }
$Global:SeDriver = $Driver
}
else { $Driver }
}