2015-10-14 110 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")