mardi 7 mars 2017

Codeception - closed popup breaks selemium test

I'm testing a simple flow using Codeception with Selenium/FacebookWebdriver where a popup window gets closed at the end - causing entire test to break.

The code is complete (the test will run) and will reproduce the error. I'm really desperate here, any suggestions will be very much appreciated.

These are the errors I get:

Codeception error message: [Facebook\WebDriver\Exception\NoSuchWindowException] Window not found. The browser window may have been closed.

Selenium server output message: WARN - Exception: Window not found. The browser window may have been closed.

This code reproduces the problem. It consits of 3 .html files (main.html, intermediate.html, popup.html), test file (PopupCest.php) and configuration file (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="http://ift.tt/2cUWoxy"></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="http://ift.tt/2cUWoxy"></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>

Thank you for your help, Tomas

Aucun commentaire:

Enregistrer un commentaire