2015-10-19 69 views
3

作爲質量保證工作我需要通過Web表單填寫大量的應用程序。 想法是將某些xls/txt /任何文件中的個人數據,讀取文件並使用Powershell將數據提供給瀏覽器。通過PowerShell填充Web表單無法識別輸入的值

當我使用下面的代碼填寫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", "[email protected]" 
$Ds1Elements = $FnId, $LnId, $PhoneId, $EmailId 

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

ClickById $DataAgreementCheckBox 
ClickById $SubmitfwdId 

回答

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++ 
} 

而且tradaaaa形式被填充,沒有人抱怨:)

0

有時候網站形式會等到輸入框失去焦點提交表單之前預先驗證的值。如果您在後臺手動設置值,文本框可能永遠無法獲得焦點,因此表單認爲您並未實際輸入任何值。

您可以通過輪流手動聚焦每個文本框,然後在單擊之前聚焦提交按鈕來解決此問題。 $ie.Document中的每個元素都應該有一個可以使用的focus()方法。