Selenium WebDriver で Pester を使用しています。WebDriver は、対応する「Describe」ブロック内の「BeforeAll」ブロックで初期化され、結果のインスタンスが $driver 変数に割り当てられます。次に、'Describe' および 'It' ブロックで、PowerShell で自動ロードされる外部 PowerShell モジュールにあるカスタム関数を呼び出します。これらの関数は、'BeforeAll' ブロックで定義された $driver 変数にアクセスできるはずですが、アクセスできず、次のエラー メッセージが表示されます。
RuntimeException: null 値の式でメソッドを呼び出すことはできません。
Search.Tests.ps1 Pester スクリプトのコードは次のとおりです。
Describe "Search for something" -Tag something {
BeforeAll {
$driver = New-WebDriver
$driver.Navigate().GoToUrl('http://example.com')
}
AfterAll {
$driver.Close()
$driver.Dispose()
$driver.Quit()
}
Find-WebElement -Selector ('some_selector')
It "Something is found in search results" {
GetTextFrom-WebElement -Selector ('some_selector') | Should Be 'something'
}
}
Find-WebElement と GetTextFrom-WebElement は、$driver を使用して CSS で要素を取得し、要素の内部テキストを抽出するヘルパー関数です。
この問題を調査し、回避策を見つけましたが、それはエレガントな方法ではないと思います。回避策は、次のように param ブロックの直後にある外部 PowerShell モジュールの各ヘルパー関数で $driver を再定義することです。
$driver = $PSCmdlet.GetVariableValue('driver')
このようにして、関数は $driver を認識でき、すべてが機能します。
私の質問:何かをすることは可能ですか?関数は常に $driver にアクセスでき、それぞれのドライバーを再定義する必要はありませんか?