1

我是 Selenium IDE 的新手,目前未能通过第一垒,被测应用程序在弹出窗口中打开一个登录窗口,输入用户名和密码,然后单击登录按钮,此时窗口关闭并显示应用程序主浏览器窗口,脚本似乎记录了 OK 但是在播放时它失败并出现 Element not found 错误,如果我使用 Target Find 按钮,则找到该字段(突出显示黄色),如果我执行命令它将值写入所以 Selenium 似乎知道它在那里。

我已经尝试了目标下拉列表中的每个选项(全部失败)并尝试输入具有相同结果的显式 xpath。任何帮助表示赞赏。

Selenium 默认目标:

id=用户名

使用 Firebug 获得的 xpath:

//*[@id="用户名"]

显式 xPath:

xpath=/html/body/table/tbody/tr/td/div/div/form/table/tbody/tr[6]/td[3]/input[@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,但很高兴被告知否则......

4

3 回答 3

3

我在 Selenium 上遇到过类似的问题,要么运行速度太快,要么没有“等待”Popup。我不得不

waitForPopUp                              30000
selectPopUp

//Do rest of code

事实证明,强制 selectPopUp 可以将 Selenium 放在正确的窗口上,其中 selectWindow target: name/id 不起作用。弹出后返回父窗口

selectWindow 

然后命令确实起作用了。

希望这可以帮助。

于 2013-07-18T18:39:51.207 回答
1

听起来即使弹出窗口在那里,测试的执行速度也太快并且id还不存在(因为如果您手动执行该步骤,它就可以工作)。

由于它似乎没有查看弹出窗口,因此您可以在 waitfor 命令之前使用 selectWindow

selectWindow | <id of window> |
waitForElementPresent | id=Username |

或者,我还使用了一个焦点命令来关注窗口(不得不用角度做很多):

focus | <id of window |
waitForElementPresent | id=Username

我也成功地使用了“clickAt”。

clickAt | <id of window, or within window itself> | 
waitForElementPresent | id=Username
type | id=Username | <username>

克伦达图

于 2013-07-10T13:44:37.090 回答
0

获取 ImplicitWait 插件。在继续运行测试之前,它会自动让 Selenium 等到所有元素都存在。它帮助我解决了许多类似的问题

于 2016-06-30T14:35:27.687 回答