21

我们正在针对我们现有的代码库运行 Selenium 回归测试,并且我们的 Web 应用程序中的某些屏幕使用弹出窗口进行中间步骤。

目前我们在测试中使用的命令:

// force new window to open at this point - so we can select it later
selenium().getEval("this.browserbot.getCurrentWindow().open('', 'enquiryPopup')");
selenium().click("//input[@value='Submit']");
selenium().waitForPopUp("enquiryPopup", getWaitTime());
selenium().selectWindow("enquiryPopup");

...大部分时间都有效。有时测试会waitForPopUp()失败

com.thoughtworks.selenium.SeleniumException: Permission denied

任何人都可以提出更好,更可靠的方法吗?

此外,我们主要在 IE6 和 7 上运行这些测试。

4

5 回答 5

4

有用!!只是为了让喜欢 selenese 的人更容易。

这对我使用 IE7(正常模式)有用。

多麻烦啊。感谢天空中的意大利面条怪物,否则我无法在 IE 中使用它。

<tr>
    <td>getEval</td>
    <td>selenium.browserbot.getCurrentWindow().open('', 'windowName');</td>
    <td></td>
</tr>
<tr>
    <td>click</td>
    <td>buttonName</td>
    <td></td>
</tr>
<tr>
    <td>windowFocus</td>
    <td>windowName</td>
    <td></td>
</tr>
<tr>
    <td>waitForPopUp</td>
    <td>windowName</td>
    <td>3000</td>
</tr>
<tr>
    <td>selectWindow</td>
    <td>windowName</td>
    <td></td>
</tr>
于 2009-01-09T18:40:46.113 回答
1

如果你在 *iehta 模式下运行,那么你会在这里和那里遇到一些小故障。我们在我的工作中运行 Selenium,IE 和 AJAX 似乎存在很多问题。

但是,听起来您遇到的问题是 Selenium 在完全加载之前尝试访问另一个窗口中的组件。我不确定您的默认超时范围设置为多少,但您可能想尝试将其增加到 60(60000 毫秒)秒左右以解决问题。

除此之外,我建议在 Firefox 中运行测试(使用 *chrome),因为它会产生更可靠的结果,但有时由于业务需求根本不可能。

于 2008-09-19T03:00:05.273 回答
0

我刚刚尝试添加另一个硒功能,windowFocus()

// force new window to open at this point - so we can select it later
selenium().getEval("this.browserbot.getCurrentWindow().open('', 'enquiryPopup')");
selenium().click("//input[@value='Submit']");
selenium().windowFocus("enquiryPopup");
selenium().waitForPopUp("enquiryPopup", getWaitTime());
selenium().selectWindow("enquiryPopup");

当我在本地运行它时,测试成功了,但只有所有这些方法调用 - create/focus/wait/select。

我将让构建服务器运行所有测试,如果这也成功,我将用它制作一个库函数......!

于 2008-09-19T03:43:42.860 回答
0

我需要在弹出窗口中选择一个 iframe 并填写表格。我在使用 selenium 找不到我的 iframe 的 selectWindow cmd 时遇到了麻烦,所以我删除了该命令。

这个 selenese 对我很有效(其中 iframe 标题和 id = account_frame):

<tr>
  <td>click</td>
  <td>//a[@class='item_add']</td>
  <td></td>
</tr>
<tr>
  <td>windowFocus</td>
  <td>account_frame</td>
  <td></td>
</tr>
<tr>
  <td>waitForPopUp</td>
  <td>account_frame</td>
  <td>10000</td>
</tr>
于 2009-12-21T18:58:50.960 回答
-1

尝试在引起问题的调用周围添加一些等待语句。

我以前也遇到过同样的错误,我能够可靠地解决它们的唯一方法是调用 System.Threading.Thread.Sleep(5000)..

于 2008-09-19T14:18:36.287 回答