Selenium IDE选择窗口问题

时间:2013-06-12 08:56:39

标签: selenium selenium-ide

我在选择使用Selenium IDE弹出的窗口时遇到了困难。我试过了

selectWindow(title)

selectPopup(title)

但它们似乎不起作用。选择窗口后,

verifyTitle(title)

工作正常,所以我开始做一些测试,测试能够匹配背景窗口上的对象。所以我似乎无法按标题匹配窗口。我也试过使用没有参数的selectWindow / selectPopup,但是没有变化。

重要的是要注意窗口是通过单击按钮启动的,该按钮还根据其ID不能为Selenium创建窗口名称,因此我们需要基于标题启动,而不是name,我无法使用openWindow或类似的,因为url等是由底层系统生成的。我只需要一致的方法来选择弹出窗口。

有谁知道如何解决这个问题?

7 个答案:

答案 0 :(得分:1)

您面临的问题是selenium IDE中存在一个错误,它只能识别IT打开的窗口。您无法使用“selectWindow”选择新窗口,因为Selenium IDE没有“打开”窗口。它在链接上“点击”,网页“打开”了窗口。

解决方法是在指向@href的超链接元素上使用storeAttribute从链接中提取url并将其存储为变量。然后使用openWindow。所以而不是:

<tr>
    <td>click</td>
    <td>//table[@id='dtgList']/tbody/tr[1]/td/a/u</td>
    <td></td>
</tr>
<tr>
    <td>pause</td>
    <td>10000</td>
    <td></td>
</tr>
<tr>
    <td>selectWindow</td>
    <td>Profile</td>
    <td></td>
</tr>

使用这种策略:

<tr>
    <td>storeAttribute</td>
    <td>//table[@id='dtgList']/tbody/tr[1]/td/a@href</td>
    <td>Profile</td>
</tr>
<tr>
    <td>echo</td>
    <td>${Profile}</td>
    <td></td>
</tr>
<tr>
    <td>openWindow</td>
    <td>${Profile}</td>
    <td></td>
</tr>
<tr>
    <td>pause</td>
    <td>10000</td>
    <td></td>
</tr>
<tr>
    <td>selectWindow</td>
    <td>Profile</td>
    <td></td>
</tr>

希望有所帮助。

答案 1 :(得分:0)

这可能适合你

click               link=activate
waitForPageToLoad   
selectWindow        Third party activation site

或试试这个

[info] Executing: |storeEval | this.browserbot.findElement('link=Pastanet').href | Link_PastaNet |
[info] Executing: |openWindow | ${Link_PastaNet} | MyWindows | 

答案 2 :(得分:0)

有时给出明确的窗口定位器类型有帮助。通过在标题前面加上title = selectWindow或selectPopup命令来指定您给出一个窗口标题。如下所示。

selectWindow  title=my window title

答案 3 :(得分:0)

没有解决方案,但我有类似的问题 在我看来,背景窗口存在问题。如果您要选择的窗口位于另一个窗口后面,则无法选择它 - 仅当窗口已在前面时才有效

答案 4 :(得分:0)

user2989297和Samit Badle是正确的,但我发现他们的答案非常模糊和令人困惑,直到我跑过另一篇文章,帮助我把它们放在一起。

诀窍是在openWindow调用期间将您自己的名称分配给要选择的窗口。这是存储变量的目的,尽管在上面的例子中并不清楚。我建议可以更容易理解以下内容。

from addressbook_pb2 import Person

如果您在Selenium IDE中工作,则等效命令为;

<tr>
    <td>storeAttribute</td>
    <td>//table[@id='dtgList']/tbody/tr[1]/td/a@href</td>
    <td>varNewWindowName</td>
</tr>
<tr>
    <td>echo</td>
    <td>${varNewWindowName}</td>
    <td></td>
</tr>
<tr>
    <td>openWindow</td>
    <td>${varNewWindowName}</td>
    <td>Profile</td>  - this is where we assign it a new name, 'Profile'
</tr>
<tr>
    <td>pause</td>
    <td>10000</td>
    <td></td>
</tr>
<tr>
    <td>selectWindow</td>
    <td>Profile</td> - now we can select it, using the new name
    <td></td>
</tr>

答案 5 :(得分:0)

我可以看到这个问题在Selenium IDE中很流行...现在,我有一个简单的方法来解决这个问题。为什么不创建新的测试用例?它会根据需要选择New Window或Popup

答案 6 :(得分:-1)

最好的解决方案是将目标放空。把标题作为一个值。

<filter>
    <filter-name>LoginFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
<filter-mapping>
    <filter-name>LoginFilter</filter-name>
    <url-pattern>/index.html</url-pattern>
  </filter-mapping>