Codeception - 关闭弹出窗口打破了selemium测试

时间:2017-03-06 11:27:12

标签: php selenium testing codeception

我正在使用Codeception与Selenium / FacebookWebdriver测试一个简单的流程,其中弹出窗口最后关闭 - 导致整个测试中断。

代码完成(测试将运行)并将重现错误。 我非常绝望,任何建议都会非常感激。

这些是我得到的错误:

Codeception错误消息: [Facebook\WebDriver\Exception\NoSuchWindowException] Window not found. The browser window may have been closed.

Selenium服务器输出消息: WARN - Exception: Window not found. The browser window may have been closed.

此代码重现了该问题。 它包含3个.html文件(main.html,intermediate.html,popup.html),测试文件(PopupCest.php)和配置文件(selenium.suite.yml)。

PopupCest.php

<?php

class PopupCest
{

    public function popup(SeleniumTester $I)
    {
        $I->expectTo('Start on main page and click a link that opens a popup');
        $I->amOnPage('/main.html');
        $I->click('#main-link');

        $I->expectTo('Interact with the popup window and click the final confirmation button');
        $I->switchToNextTab();
        $I->click('#final-confirmation-button');

        $I->expectTo('Go back to intermediate window and let it do its magic');
        $I->switchToPreviousTab();
        $I->see('contents of this intermediate page');
        $I->seeInCurrentUrl('intermediate.html');
    }

}

selenium.suite.yml

class_name: SeleniumTester
modules:
  enabled:
    - WebDriver:
        url: http://localhost
        browser: firefox
    - \Helper\Selenium

main.html中

<html>
<head>
    <meta charset="utf-8">
    <title>Main page - under my control</title>
    <meta name="description" content="Main page - under my control">
</head>

<body>
    <h1>Main</h1>
    <p>
        After clicking this link, "intermediate page" url is received from a backend operation in reality.
    </p>
    <br>
    <a href="intermediate.html" id="main-link">Click here to open the popup</a> <br>
</body>
</html>

intermediate.html

<html>
<head>
    <meta charset="utf-8">
    <title>External - intermediate page</title>
    <meta name="description" content="Intermediate page outside of my control">
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>

<body>
    <h1>Intermediate</h1>
    <p>
        In reality, contents of this intermediate page is fully controlled by other party - a payment processor. <br>
        It only load a javascript that opens up a popup window where user enters his payment details.
    </p>


    <script type="text/javascript">
        $(function() {
            var settings = "height=400,width=500,status=yes,dependent=no,resizable=yes";

            popup = window.open('popup.html', 'dont_know_the_name_here', settings);
            if (popup != null) {
                popup.focus();
            }
        });
    </script>
</body>
</html>

popup.html

<html>
<head>
    <meta charset="utf-8">
    <title>External - popup</title>
    <meta name="description" content="Popup page outside of my control">
    <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
</head>

<body>
    <h1>Popup</h1>
    <p>
        Contents of this page is fully controlled by other party - a payment processor. <br>
        This is where user enters his payment details.
    </p>
    <p>
        e.g. <i>"After you have finished your data input, click here to:"</i> <br>
        <a href="" id="final-confirmation-button">Confirm your payment</a>
    </p>


    <script type="text/javascript">
        $(function() {
            $('#final-confirmation-button').on('click', function(e) {
                e.preventDefault();
                window.close(); // <-- this breaks it all 
            });
        });
    </script>
</body>
</html>

感谢您的帮助, 托马斯

1 个答案:

答案 0 :(得分:0)

测试代码似乎是正确的,我怀疑这个问题与过时的版本或可能的Firefox驱动程序有关。

我用chrome + chromedriver测试了你的代码,它似乎没有问题。这是一个测试仓库,其中包含如何使用chromedriver +所需配置更改的说明:https://github.com/henrikauppinen/codeception-popup-chromedriver

一般情况下,我建议您使用Chrome进行此类测试,除非您专门测试Firefox或是否需要。