我正在为我正在研究的网站进行测试自动化。我使用Windows PowerShell来创建脚本来执行此操作。我的问题是我需要点击一个打开另一个窗口的链接,我需要一个如何引用该窗口。
$ie = new-object -com "InternetExplorer.Application"
$ie.navigate("http://localhost:4611")
$ie.visible = $true
$doc = $ie.document
$link = $doc.getElementByID('link')
这是我获得对浏览器和链接的引用的地方。然后我点击链接:
$link.click()
这会打开一个新窗口,其中包含我需要在其上进行测试的内容。我如何获得对这个新窗口的引用?从技术上讲,它不是第一个的儿童窗口。
我试图将链接的点击设置为这样的引用,但它不起作用:
$test = new-object -com "InternetExplorer.Application"
$test = $link.click()
更新 这是被调用以打开窗口的JavaScript函数openwindow
function openwindow(url, name) {
if (typeof openwindow.winrefs == 'undefined') {
openwindow.winrefs = {};
}
if (typeof openwindow.winrefs[name] == 'undefined' || openwindow.winrefs[name].closed) {
openwindow.winrefs[name] = window.open(url, name, 'scrollbars=yes,menubar=no,height=515,width=700,resizable=no,toolbar=no,status=no');
} else {
openwindow.winrefs[name].focus();
};
};
该函数在一行代码中调用,如下所示
column.For(i => "<a href='" + link + i.id + "?status=new' target='pat" + i.id + "'id'enc' onclick='openwindow(this.href,this.target);return false'>
最终更新: 我的结果略有不同。我创建了一个新的Internet Explorer对象并从链接中获取了href并设置了所有选项并使用PowerShell导航到窗口,就像javascript一样。
$ie2 = new-object -com "InternetExplorer"
$ie2.visible = $true
$ie2.menubar = $false
$ie2.height = 515
$ie2.width = 700
$ie2.resizable = $false
$link = $doc.getelementbyid('link')
$url = $link.href
$ie2.navigate($url)
我非常感谢@scunliffe帮助我解决这个问题。
答案 0 :(得分:1)
此方法中存在拼写错误:$ doc.getElementByID('link')
它应该是:
$doc.getElementById('link')
^ lowercase d
<强>更新强>
根据后续代码/评论......您应该能够使用以下内容提取对窗口的引用:
$ie = new-object -com "InternetExplorer.Application"
$ie.navigate("http://localhost:4611")
$ie.visible = $true
$doc = $ie.document
$link = $doc.getElementById('link')
$link.click()
该链接具有一个目标属性集,openwindow函数使用该属性为弹出窗口指定名称。
openwindow函数本身在一个名为winrefs的属性中存储对弹出窗口的引用,因此现在应该得到窗口...(如果我对IE窗口中的PowerShell语法的期望是正确的。
$targetName = $link.target
$popupHandle = $ie.openwindow.winrefs[$targetName]