通过PowerShell填写Web表单无法识别输入的值

时间:2015-10-19 13:56:33

标签: user-interface powershell ui-automation

作为质量保证工作我需要通过网络表单填写大量应用程序。 想法是将个人数据放在某些xls / txt /任何文件中,读取文件并使用Powershell将数据提供给浏览器。

当我使用下面的代码在IE中填写表单时,即使它似乎工作正常,但在提交没有输入数据的表单时出现错误。

任何想法或建议如何克服这一点将非常感激

可悲的是,我的资源仅限于Powershell 2.0。硒或任何其他更复杂的"工具至少目前是不可能的。

validation error here

$ie = New-Object -com InternetExplorer.Application
$ie.Navigate("MyURL")
$ie.visible = $true

while ($ie.ReadyState -ne 4){sleep -m 100}

Function ClickById($id) {
    $ie.document.getElementById($id).Click()
}

### Základní údaje
$FnId = 'personalData.firstName'
$LnId = 'personalData.lastName'
$PhoneId = 'personalData.mobilePhone'
$EmailId = 'personalData.email'
$DataAgreementCheckBox = 'application.personalDataAgreement'
$SubmitfwdId = 'forward'


$Values = "Ublala", "Pung", "222333444", "ublala@pung.com"
$Ds1Elements = $FnId, $LnId, $PhoneId, $EmailId

$j = 0
foreach ($El in $Ds1Elements) {
    $ie.document.getElementById($El).value = $values[$j]
    $j++
}

ClickById $DataAgreementCheckBox
ClickById $SubmitfwdId

2 个答案:

答案 0 :(得分:1)

感谢您的建议,但它不起作用,因为表格在很多方面都是愚蠢的。 无论如何,当使用SendKeys方法时,我使用了你的建议作为焦点,并且它完成了诀窍。

一开始我需要加载这个程序集

[void] [System.Reflection.Assembly]::LoadWithPartialName("'System.Windows.Forms")

然后相应地更改循环以使用SendKeys方法

$j = 0
foreach ($El in $Ds1Elements) {
    $ie.document.getElementById($El).focus()
    [System.Windows.Forms.SendKeys]::Sendwait($values[$j]);   
    $j++
}

并且填写表格并且没有人抱怨:)

答案 1 :(得分:0)

有时网站表单会一直等到输入框失去焦点,才能在提交表单之前预先验证该值。如果您在后台手动设置值,则表单可能永远不会获得焦点,因此表单认为您实际上没有输入任何值。

您可以通过依次手动聚焦每个文本框,然后在单击之前聚焦提交按钮来解决此问题。 (?:(?<!")\n(?!"))|(?:(?<=")\n(?!"))|(?:(?<!")\n(?=")) 中的每个元素都应该使用x\n方法。