代码之家  ›  专栏  ›  技术社区  ›  brasskazoo

使用Selenium处理浏览器弹出窗口

  •  21
  • brasskazoo  · 技术社区  · 18 年前

    我们正在对现有的代码库运行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和IE7上运行这些测试。

    5 回复  |  直到 11 年前
        1
  •  3
  •   branchgabriel    17 年前

    它奏效了!!只是为了让喜欢硒人的人更容易。

    这对我使用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>
    
        2
  •  1
  •   Josh    18 年前

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

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

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

        3
  •  0
  •   brasskazoo    18 年前

    我刚刚尝试添加另一种硒功能, 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
  •  0
  •   nicholasklick    16 年前

    我需要在弹出窗口中选择一个iframe并填写表单。 在selenium找不到我的iframe的情况下,我在使用selectWindow cmd时遇到了问题,因此我删除了该命令。

    这个硒语对我来说效果很好(其中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
  •  -1
  •   Peter Bernier    18 年前

    尝试在导致问题的呼叫周围添加一些等待语句。

    我以前也犯过同样的错误,只有这样我才能 可靠地 通过致电System来解决这些问题。穿线。线程。睡眠(5000)。。