Codeception验收测试接受弹出窗口

时间:2017-04-20 17:44:26

标签: php testing automated-tests codeception

我目前正在使用Codeception 2.2来测试应用程序。我到目前为止的步骤如下:

<?php 
$I = new AcceptanceTester($scenario);
$I->wantTo('perform actions and see result');
$I->amOnPage('/index.php');
$I->fillField('username', 'admin');
$I->fillField('password', 'password');
$I->click('Sign in');
$I->amOnPage('/index.php?module=CustomReports&view=Edit');
$I->fillField('relatedclient', '******');
$I->fillField('policynumber', '****');
$I->click('Save');
$I->see('You are being redirected to the clients isa report.');
$I->click('OK');    // This is where it fails
$I->see('Client ISA Statement');
?>

目前我正在使用PHP和内联JS,这是发生错误的地方。我想知道如何接受window.alert才能进入下一页。我尝试了$I->click('OK'),但这似乎不起作用。

由于

5 个答案:

答案 0 :(得分:3)

这在代码中是一个令人困惑的东西。 您可以尝试使用

$I->acceptPopup()

不幸的是,它可能无法正常工作。这是由selenium2驱动程序引起的。有时,当浏览器发出警报时,他们无法得到钩子。我看到关于这些警报真的很混乱。

答案 1 :(得分:0)

尝试这种方法:

    $I = $this->tester;

    $I->amGoingTo("check whether any JS alert appears and accept it");
    $I->executeInSelenium(function (\Facebook\WebDriver\WebDriver $webdriver) {
        try {
            $webdriver->wait(1.5, 200)->until(
                WebDriverExpectedCondition::alertIsPresent()
            );
            $webdriver->switchTo()->alert()->accept();

        } catch (Exception $e) {
            echo("###ERROR: oops, didnt manage to find the alert. Exception: '" . $e->getTraceAsString() . "' 
            Please contact test developers for investgation");
        }
    });
    if (strlen($this->errorMessage) > 0) {
        $I->comment($this->errorMessage);
    }

希望这有助于你。 的问候,

答案 2 :(得分:0)

另一种可行的方法是对“确定”使用更具体的选择器  按钮。

这是为我工作的人:

$I->click("//button[contains(@class, 'x-btn-text') and text() = 'OK']");

在这种情况下,“按钮”是我要单击的HTML标记,“ x-btn-text”是按钮的类,“ OK”是标记内的文本。

如果按钮具有唯一的ID(或者您可以添加一个ID),则更为简单:

<button id="button_id" type="button">OK</button>

$I->click('#button_id');

请注意,除非您使用WebDriver进行验收测试,否则这可能无法正常工作。

答案 3 :(得分:0)

尝试一下

 try {
    $I->click('i.e. CLOSE BUTTON OF YOUR POPUP ELEMENT');
    } catch (\PHPUnit_Framework_Exception $e) {
       // failed assertion handled
    }   

答案 4 :(得分:0)

这终于奏效了:

$I->waitForElementVisible("//button[contains(@class, 'x-btn-text') and text() = 'Yes']");
$I->click("//button[contains(@class, 'x-btn-text') and text() = 'Yes']");