我创建了几个使用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, 基督教
答案 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上阅读有关这些课程的更多信息。