我目前正在使用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')
,但这似乎不起作用。
由于
答案 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']");