我正在使用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>
感谢您的帮助, 托马斯
答案 0 :(得分:0)
测试代码似乎是正确的,我怀疑这个问题与过时的版本或可能的Firefox驱动程序有关。
我用chrome + chromedriver测试了你的代码,它似乎没有问题。这是一个测试仓库,其中包含如何使用chromedriver +所需配置更改的说明:https://github.com/henrikauppinen/codeception-popup-chromedriver
一般情况下,我建议您使用Chrome进行此类测试,除非您专门测试Firefox或是否需要。