2015-10-14 109 views
10

我想一個自動化的Outlook Web Access網站,填寫一些文本框,然後點擊一個按鈕,自動化(IE ComObject)填寫文本框

我能找到在第一頁的相關要素(簽到)和提交按鈕,所以我通過登錄階段,我的問題是找到一些頁面內的元素與蒙面文本框,我附加了3個步驟的快照,以及對象的DOM圖像。

The Login Page

$IE = New-Object -ComObject InternetExplorer.Application 
$URL = 'https://somewebsite/ecp/?rfr=owa&p=PersonalSettings/Password.aspx' 
$IE.Visible = $true 
$IE.Navigate($URL) 
While ($IE.Busy -eq $true) {Start-Sleep -Milliseconds 2000} 

$ie.Document.getElementById('username').value = "username" 
$ie.Document.getElementById('password').value = "password" 
$Submit = $ie.Document.getElementsByTagName('Input') | ? {$_.Type -eq "Submit"} 
$Submit.click() 

到目前爲止好,我的問題開始在網頁裏面,我只是找不到文本框元素的密碼字段,

enter image description here

也是這裏的這些元素的DOM快照:

enter image description here

我真的很感謝所有幫助

+0

可以使用WASP對PowerShell的[鏈接](https://wasp.codeplex.com)。 導入模塊。一旦頁面靠近需要去的地方,您可以使用 $ IE |發送密鑰「{TAB}」 設定的時間量瀏覽網頁以獲取您想要的位置。 –

+0

wasp不是一個選項,應該在多個系統上運行,WShell。SendKey不是一個選項,不穩定 – Avshalom

回答

0

OK,我發現它:)

的問題是,該網站有兩個內部框架,一個在另一個內部,

$IFrame = $ie.Document.getElementsByTagName('iframe').item(0) 
$IFrame = $IFrame.contentWindow.document.getElementsByTagName('iframe').item(0) 
$PasswordSlab = $IFrame.contentWindow.document.getElementById('passwordSlab') 
$PasswordSlab.document.getElementById('txtOldPwd').value = $OldPassword 
$PasswordSlab.document.getElementById('txtNewPwd').value = $NewPassword 
$PasswordSlab.document.getElementById('txtConfirmPwd').value = $NewPassword 
$PasswordSlab.document.getElementById('save').click() 

感謝大家

0

有可能與使用UI Automation.there我們可以使用自動化ID很容易檢測元件,我們可以很容易地進行讀/寫operation's.But我不知道你是否使用UI自動化很舒服,如果它很好,那麼我認爲我可以幫助你。 UI自動化有很多操作,如

1)UI自動化。

2)白

3)watin.etc,

,如果你是舒適與任何框架,然後我想我可以幫助你。

+0

只需通過以下鏈接獲取簡要思路:UI路徑:[http://www.uipath.com/]
UI自動化:[https:// msdn.microsoft.com/en-us/library/ms747327(v=vs.110).aspx]白色:[https://github.com/TestStack/White] Watin:[http://watin.org/] –

1

我在嘗試automate a file upload on sharepoint時遇到了同樣的問題。 訣竅是上傳表單在新框架內打開。

<iframe id="Dlg..." class="ms-dlgFrame" src="https://.../Upload.aspx?List=..."></iframe> 

因此,要獲得輸入字段,我不得不考慮每一個打開的框架,並選擇一個具有良好的地理位置:

for($i=0;$i -lt $ie.Document.frames.length;$i++){ 
    if($ie.Document.frames.item($i).location.href -match 'upload.aspx'){ 
     $frm=$ie.Document.frames.item($i)} 
} 

從那以後,我能夠針對輸入字段:

$frm.document.body.getElementById("txtOldPwd")