使用带有Powershell的JavascriptExecutor

时间:2014-03-19 11:26:30

标签: javascript powershell selenium

我创建了几个使用Selenium Webdriver的Powershell脚本。

现在我需要为其中一个添加一些Javascript功能,但我无法弄清楚如何使语法正确。

尝试从此讨论中转换以下C#代码: Execute JavaScript using Selenium WebDriver in C#

这就是我的代码目前的样子:

# Specify path to Selenium drivers
$DriverPath = (get-item ".\" ).parent.parent.FullName + "\seleniumdriver\"
$files = Get-ChildItem "$DriverPath*.dll"

# Read in all the Selenium drivers
foreach ($file in $files) {
    $FilePath = $DriverPath + $file.Name
    [Reflection.Assembly]::LoadFile($FilePath) | out-null
}

# Create instance of ChromeDriver
$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver

# Go to example page google.com
$driver.Url = "http://www.google.com"

# Create instance of IJavaScriptExecutor
$js = New-Object IJavaScriptExecutor($driver)

# Run Javascript to get current url title
$title = $js.executeScript("return document.title")

# Write titel to cmd
write-host $title

但是在创建IJavaScriptExecutor实例时,我经常会遇到以下错误:

“New-Object:找不到类型[IJavaScriptExecutor]:确保加载包含此类型的程序集。”

有人能弄明白我错过了什么吗?这是不正确的代码吗?缺少额外的dll?

BR, 基督教

1 个答案:

答案 0 :(得分:1)

问题是IJavaScriptExecutor是一个接口,您无法创建接口的实例。相反,您需要创建实现接口的类的实例。在这种情况下,ChromeDriver类实现了此接口,因此您可以跳过创建$js变量的行,而是使用$driver

因为你的javascript函数按预期工作,所以你得到类似下面的东西:

# Create instance of ChromeDriver
$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver

# Go to example page google.com
$driver.Url = "http://www.google.com"

# Run Javascript to get current url title
$title = $driver.executeScript("return document.title")

您可以在the Selenium Documentation上阅读有关这些课程的更多信息。