我是Selenium IDE的新手,目前未能通过一垒,正在测试的应用程序在弹出窗口中打开一个登录窗口,用户名&输入密码,然后单击登录按钮,关闭哪个点窗口,应用程序显示在主浏览器窗口中,脚本似乎记录OK但是在播放时它失败并显示Element not found错误,如果我使用Target Find按钮,则字段为找到(突出显示为黄色),如果我执行命令,它会将值写入字段,因此Selenium似乎知道它在那里。
我已经尝试了目标下拉列表中的每个选项(全部失败)并尝试输入具有相同结果的显式xpath。任何帮助表示赞赏。
Selenium默认目标:
ID =用户名
使用Firebug获得的xpath:
// * [@ ID = “USERNAME”]
显式xPath:
的xpath = / HTML /体/表/ tbody的/ TR / TD / DIV / DIV /形式/表/ tbody的/ TR [6] / TD [3] /输入[@ ID = “USERNAME”]
登录窗口源代码:
<body text="#000000" marginwidth="0" marginheight="0" oncontextmenu="return false;" topmargin="0" leftmargin="0">
<div class="header">
<table width="100%" cellspacing="1" cellpadding="1" border="0">
<tbody>
<tr>
<td width="20%"> </td>
<td class="Login">
<p align="center">
<div id="1ULogon">
<div id="2ULogon" onclick="websys_sckeys[String.fromCharCode(113)]='websys_help(\'1473\',\'-100000000000000\',\'\');'" style="LEFT: 0px; TOP: 0px">
<form id="3ULogon" autocomplete="off" name="3ULogon" method="post" action="logon.asp">
<input id="AB" type="HIDDEN" value="4UserLogon" name="AB">
<input id="AC" type="HIDDEN" value="zzzzzz" name="AC">
<table>
<tbody>
<tr>
<tr>
<tr>
<tr>
<tr>
<tr>
<td>
<td>
<td>
<input id="USERNAME" value="" title="Username" tabindex="1" name="USERNAME">
更新
不确定这是否为假导致 - 窗口名称为:
_parent
我发现一条评论说这个“用于框架,它将在内框架中打开”
这与此有什么关系吗?
父页面上的脚本如下:
<!--
var url='logon.asp?xxx';
function newwin(url)
{
var
window.open('','_parent','');
window.close();
}
//-->
然后在BODY标签中我们有
<body onload="newwin(url1);">
如此相当自信的弹出窗口被命名为_parent,但很高兴被告知......
答案 0 :(得分:3)
我遇到过类似的问题,Selenium运行得太快或者没有“等待”.Popup。我不得不
waitForPopUp 30000
selectPopUp
//Do rest of code
结果强制selectPopUp工作将Selenium放在正确的窗口上,其中selectWindow target:name / id不起作用。
后弹出窗口返回到父窗口selectWindow
命令然后工作。
希望这有帮助。
答案 1 :(得分:1)
听起来就像弹出窗口那样,测试的执行速度太快而且id还没有(因为如果你手动执行那个步骤它就可以工作)。
由于看起来它没有查看弹出窗口,你可以在waitfor命令之前使用selectWindow
selectWindow | <id of window> |
waitForElementPresent | id=Username |
或者,我也使用了一个焦点命令来专注于窗口(必须使用angular进行此操作):
focus | <id of window |
waitForElementPresent | id=Username
我也成功使用了'clickAt'。
clickAt | <id of window, or within window itself> |
waitForElementPresent | id=Username
type | id=Username | <username>
Klendathu
答案 2 :(得分:0)
获取ImplicitWait插件。在继续运行测试之前,它会自动让Selenium等到所有元素都存在。它帮助我解决了许多类似的问题