我将 Pester 与 Selenium WebDriver 一起使用。WebDriver 在相应的“Describe”块内的“BeforeAll”块中初始化,并将生成的实例分配给 $driver 变量。然后,在“描述”和“它”块中,我调用驻留在外部 PowerShell 模块中的自定义函数,该模块由 PowerShell 自动加载。我希望这些函数可以访问“BeforeAll”块中定义的 $driver 变量,但它没有发生,我收到以下错误消息:
RuntimeException:您不能在空值表达式上调用方法。
以下是 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 获取元素并提取元素的内部文本。
我调查了这个问题并找到了解决方法,但我认为这不是一个优雅的方法。解决方法是在外部 PowerShell 模块中的每个辅助函数中重新定义 $driver,就在 param 块之后,如下所示:
$driver = $PSCmdlet.GetVariableValue('driver')
这样,函数可以看到 $driver 并且一切正常。
我的问题:是否有可能做某事,所以函数总是可以访问 $driver 而无需在每个函数中重新定义驱动程序?