作为质量保证工作我需要通过网络表单填写大量应用程序。 想法是将个人数据放在某些xls / txt /任何文件中,读取文件并使用Powershell将数据提供给浏览器。
当我使用下面的代码在IE中填写表单时,即使它似乎工作正常,但在提交没有输入数据的表单时出现错误。
任何想法或建议如何克服这一点将非常感激
可悲的是,我的资源仅限于Powershell 2.0。硒或任何其他更复杂的"工具至少目前是不可能的。
$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
答案 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
方法。