使用Selenium和Powershell - 清除输入字段

时间:2015-01-13 22:38:09

标签: .net powershell selenium

我对此感到很疯狂,因此提供的任何帮助都是适用的。

我正在尝试在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

任何建议或帮助将不胜感激。谢谢。

2 个答案:

答案 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()