Codeception - 关闭弹出窗口中断硒测试
Codeception - closed popup breaks selemium test
我正在使用 Codeception 和 Selenium/FacebookWebdriver 测试一个简单的流程,其中弹出窗口 window 最后关闭 - 导致整个测试中断。
代码已完成(测试将 运行)并将重现错误。
我真的很绝望,任何建议将不胜感激。
这些是我得到的错误:
解码错误信息:
[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>
感谢您的帮助,
托马斯
测试代码似乎是正确的,我怀疑问题与过时的版本或可能与 Firefox 驱动有关。
我用 chrome+chrome 驱动程序测试了你的代码,它似乎没有问题。这是一个测试仓库,其中包含如何使用 chrome 驱动程序 + 所需配置更改的说明:https://github.com/henrikauppinen/codeception-popup-chromedriver
一般来说,我建议使用 Chrome 进行此类测试,除非您专门测试 Firefox 或者有此要求。
我正在使用 Codeception 和 Selenium/FacebookWebdriver 测试一个简单的流程,其中弹出窗口 window 最后关闭 - 导致整个测试中断。
代码已完成(测试将 运行)并将重现错误。 我真的很绝望,任何建议将不胜感激。
这些是我得到的错误:
解码错误信息:
[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>
感谢您的帮助, 托马斯
测试代码似乎是正确的,我怀疑问题与过时的版本或可能与 Firefox 驱动有关。
我用 chrome+chrome 驱动程序测试了你的代码,它似乎没有问题。这是一个测试仓库,其中包含如何使用 chrome 驱动程序 + 所需配置更改的说明:https://github.com/henrikauppinen/codeception-popup-chromedriver
一般来说,我建议使用 Chrome 进行此类测试,除非您专门测试 Firefox 或者有此要求。