Selenium IDE,无论目标如何输入,都找不到元素

时间:2013-07-10 12:45:03

标签: selenium-ide popupwindow

我是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,但很高兴被告知......

3 个答案:

答案 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等到所有元素都存在。它帮助我解决了许多类似的问题