Selenium webdriver& powershell从一个元素突出显示文本,复制它,然后粘贴

时间:2014-08-28 17:35:52

标签: powershell selenium

所以我需要突出显示元素(textarea)中的文本,突出显示的副本然后将其粘贴到另一个元素中。

存储第一个元素的值,然后使用SendKeys填充另一个元素对我来说不是一个选项。因为那时我会用javascript遇到其他问题。

这是我到目前为止的一个例子:

# Creating FirefoxDriver
$driver = New-Object OpenQA.Selenium.Firefox.FirefoxDriver

# Go to made up URL
$driver.url = "https://www.madeupdomain.com/"

# Find element and store in $MyElement
$MyElement = $driver.FindElementByXPath("//*[@id='MadeUpTextAreaElementId']")

# Attempt to highlight all
$MyElement.SendKeys($driver.keys.CONTROL + 'A')

# Attempt to copy text from text
$MyElement.SendKeys($driver.keys.CONTROL + 'C')

# Find another element to paste text to
$MyOtherElement = $driver.FindElementByXPath("//*[@id='AnotherMadeUpTextAreaElementId']"

# Attempt to paste copied text to another element
$MyOtherElement.SendKeys($driver.keys.CONTROL + 'V')

但这只是输入" A"和" C"进入第一个元素,然后" V"进入最后一个元素。

猜测问题在于" $ driver.keys.CONTROL"部分。我如何让Selenium理解它是我想要执行的关键任务?

1 个答案:

答案 0 :(得分:1)

原来我开始错误地认为“$ driver.keys.CONTROL”是个问题。

“$ driver.keys.CONTROL”远不及解决方案!

为了在Powershell中模拟ctrl + a,ctrl + c和ctrl + v,您需要使用System.Windows.Forms.SendKeys。可以在此处找到使用此键盘的所有可用击键列表: http://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.send(v=vs.110).aspx

其次,为了将这些击键与Selenium webdriver一起使用,我使用了OpenQA.Selenium.Interactions.Actions中的SendKeys方法。我在查看了几个与java相关的线程后发现了这一点。花了一些时间转换成Powershell友好代码: http://selenium.googlecode.com/git/docs/api/java/org/openqa/selenium/interactions/Actions.html#sendKeys(java.lang.CharSequence...)

所以无论如何这里是我的代码更新,执行我需要的ctrl + a,ctrl + c和ctrl + v动作:

# Creating FirefoxDriver
$driver = New-Object OpenQA.Selenium.Firefox.FirefoxDriver

# Create instans of Actions
$actions = New-Object OpenQA.Selenium.Interactions.Actions($driver)

# Go to made up URL
$driver.url = "https://www.madeupdomain.com/"

# Find element and store in $MyElement
$MyElement = $driver.FindElementByXPath("//*[@id='MadeUpTextAreaElementId']")

# Attempt to highlight all
$actions.SendKeys($MyElement,[System.Windows.Forms.SendKeys]::SendWait("^a")) | out-null

# Attempt to copy text from text
$actions.SendKeys($MyElement,[System.Windows.Forms.SendKeys]::SendWait("^c")) | out-null

# Find another element to paste text to
$MyOtherElement = $driver.FindElementByXPath("//*[@id='AnotherMadeUpTextAreaElementId']"

# Attempt to paste copied text to another element
$actions.SendKeys($MyElement,[System.Windows.Forms.SendKeys]::SendWait("^v")) | out-null

使用System.Windows.Forms.SendKeys时,请确保您的浏览器窗口处于焦点!我错误地在某些运行期间选择了powershell提示,这导致不必要的故障排除。