我对此感到很疯狂,因此提供的任何帮助都是适用的。
我正在尝试在Powershell v4中使用Selenium 2.44(.NET 3.5)。我正在使用ChromeWebDriver,并且正在使用chromedriver.exe v2.13(找到here)。
# Import the Selenium DLLs
Add-Type -Path "C:\mydir\Selenium.WebDriverBackedSelenium.dll"
Add-Type -Path "C:\mydir\ThoughtWorks.Selenium.Core.dll"
Add-Type -Path "C:\mydir\WebDriver.dll"
Add-Type -Path "C:\mydir\WebDriver.Support.dll"
$driver = New-Object OpenQA.Selenium.Chrome.ChromeDriver
$driver.Navigate().GoToUrl("https://my.login.site.com/")
$inputField = $driver.FindElementsById("input_1")
$inputField.SendKeys("My_Search_Query")
我列出的所有东西都很棒。但是,只要我尝试清除来自$inputField
变量的输入,就会出现此错误:
$inputField.Clear()
##############
Cannot find an overload for "Clear" and the argument count: "0".
At line:1 char:1
+ $inputField.Clear()
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
但是,如果我将$inputField
传递到Get-Member
cmdlet,我可以清楚地看到有一个Clear()方法:
> $inputField | Get-Member
TypeName: OpenQA.Selenium.Remote.RemoteWebElement
Name MemberType Definition
---- ---------- ----------
Clear Method void Clear(), void IWebElement.Clear()
Click Method void Click(), void IWebElement.Click()
Equals Method bool Equals(System.Object obj)
. . .
我尝试在OpenQA.Selenium.Interactions.Actions
命名空间和[System.Windows.Forms.SendKeys]
命名空间中查找,但这不起作用。
$actions = New-Object OpenQA.Selenium.Interactions.Actions($driver)
Add-Type -AssemblyName System.Windows.Forms
$actions.SendKeys($inputField,[System.Windows.Forms.SendKeys]::SendWait("{BACKSPACE}"))
Cannot find an overload for "SendKeys" and the argument count: "2".
At line:1 char:1
+ $actions.SendKeys($inputField,[System.Windows.Forms.SendKeys]::SendWait("{BACKSP ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodException
+ FullyQualifiedErrorId : MethodCountCouldNotFindBest
任何建议或帮助将不胜感激。谢谢。
答案 0 :(得分:3)
我试过这个,我认为Clear正在做你期望的事情。
$driver.FindElementsById("input_1").Clear
会给你
OverloadDefinitions
-------------------
void ICollection[IWebElement].Clear()
void IList.Clear()
我认为clear将在集合而不是元素上调用,因为FindElementsById返回一个列表。
如果您尝试
$driver.FindElementsById("input_1") | % { $_.Clear }
然后你会得到你想要的Clear方法。
OverloadDefinitions
-------------------
void Clear()
void IWebElement.Clear()
我希望它有所帮助。
答案 1 :(得分:0)
可能与导航到链接的方式有关。这对我有效,请尝试一下。
$driver = Start-SeChrome -StartURL "https://my.login.site.com/"
$driver.FindElementById('input_1').SendKeys("My_Search_Query");
$driver.FindElementById('input_1').clear()