2015-10-14 8 views
10

Sto cercando di automatizzare un sito web di Outlook Web Access, riempire alcune caselle di testo e fare clic su alcuni pulsanti,Automatizzare (IE ComObject) Riempire caselle di testo

posso trovare gli elementi pertinenti in prima pagina (sign-in) e il pulsante di invio, così passo la fase di login, il mio problema è quello di trovare gli elementi all'interno di una pagina con caselle di testo mascherate, ho allegato uno snapshot dei 3 passaggi, e anche l'immagine DOM dell'oggetto.

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() 

finora tutto bene, il mio problema di avvio nelle pagine interne, io proprio non riesco a trovare le caselle di testo elementi per i campi password,

enter image description here

anche qui c'è lo snapshot DOM per questi elementi:

enter image description here

Sono davvero apprezzare alcun aiuto

+0

È possibile utilizzare WASP per PowerShell [link] (https://wasp.codeplex.com). Importare il modulo. Una volta su una pagina vicina a dove devi andare potresti usare $ IE | Tasti di invio "{TAB}" un certo numero di volte per navigare attraverso la pagina web per arrivare dove vuoi. –

+0

wasp non è un'opzione, deve essere eseguito su più sistemi, WShell.SendKey non è un'opzione come wel, non stabile a tutti – Avshalom

risposta

0

OK ho trovato :)

il problema era che il sito ha avuto un IFrame due, uno dentro l'altro,

$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() 

Grazie per tutti

0

E 'possibile con utilizzo UI Automation.there possiamo facilmente individuare l'elemento utilizzando l'ID di automazione e possiamo facilmente eseguire lettura/scrittura operation's.But non so se il vostro sono a mio agio con l'automazione dell'interfaccia utente, se è bene allora penso di poterti aiutare. ci sono molte opzioni nell'automazione dell'interfaccia utente come

1) Automazione UI.

2) Bianco

3) watin.etc.,

se hai dimestichezza con qualsiasi del quadro, allora penso di poter dare una mano.

+0

U una sola volta passare attraverso i seguenti collegamenti per avere un'idea breve: UI Path: [http://www.uipath.com/]
UI Automation: [https: // msdn.microsoft.com/en-us/library/ms747327(v=vs.110).aspx] Bianco: [https://github.com/TestStack/White] Watin: [http://watin.org/] –

1

Ho avuto lo stesso tipo di problema durante il tentativo di automate a file upload on sharepoint. Il trucco era che il modulo di caricamento era aperto all'interno di un nuovo frame.

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

Quindi, per ottenere i campi di input che ho dovuto guardare in ogni frame aperti e selezionare quello con la buona posizione:

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

da allora sono stato in grado di indirizzare il campo di inserimento:

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