【问题标题】:Handling browser pop-up windows with Selenium使用 Selenium 处理浏览器弹出窗口
【发布时间】:2008-09-19 02:44:34
【问题描述】:

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

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

// 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 上运行这些测试。

【问题讨论】:

  • 这个线程到底是什么鬼?下面有 5 个不同的人试图劫持它!

标签: internet-explorer selenium popup regression-testing


【解决方案1】:

有效!!只是为了让喜欢 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>

【讨论】:

  • 这对我不起作用,除非我将 windowFocus 移动到发出的最后一个命令。在waitForPopUp之前没有任何意义,不是吗?
【解决方案2】:

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

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

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

【讨论】:

  • 哦,相信我,我希望我们可以在 Firefox 中运行它!但是我们 99% 的用户都在 IE 上,所以这是测试的优先级……我们也使用 *iexplore,而不是 *iehta。我不知道这些差异?
  • *iehta 和 *chrome 允许 https 支持。这样您就不必担心证书带来的问题。
【解决方案3】:

我刚刚尝试添加另一个 selenium 函数,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。

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

【讨论】:

  • 目前,它一直在工作,所以我将使用弹出窗口将其扩展到所有测试(我们最终将转向灯箱)。
【解决方案4】:

我需要在弹出窗口中选择 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>

【讨论】:

    【解决方案5】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-22
      • 1970-01-01
      • 2013-02-03
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      相关资源
      最近更新 更多