我是Yii2和编程测试的新手。 我正在使用Codeception进行测试。
摘要:
在我的一项测试中,我必须单击确认对话框的“确定”按钮。为此,我尝试了:
$ I-> click('OK');
$ I-> acceptPopup();
他们俩都不起作用。
详细信息:
我使用ActiveRecord处理产品表(“ productos”),并使用Gii生成脚本。
<?php
namespace app\models;
use Yii;
/**
* This is the model class for table "productos".
*
* @property int $id
* @property string $codigo
* @property string $descripcion
* @property double $cantidad
* @property double $precio
* @property string $fefecto
*
* @property DetallesPedido[] $detallesPedidos
*/
class Productos extends \yii\db\ActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'productos';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['codigo', 'descripcion', 'precio', 'fefecto'], 'required'],
[['cantidad', 'precio'], 'number'],
[['fefecto'], 'date', 'format'=>'yyyy-M-d'],
[['fefecto'], 'safe'],
[['codigo'], 'string', 'max' => 10],
[['descripcion'], 'string', 'max' => 60],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'codigo' => 'Codigo',
'descripcion' => 'Descripcion',
'cantidad' => 'Cantidad',
'precio' => 'Precio',
'fefecto' => 'Fecha Alta',
];
}
}
与Productos.php关联的视图的脚本为:
use yii\helpers\Html;
use yii\widgets\DetailView;
/* @var $this yii\web\View */
/* @var $model app\models\Productos */
$this->title = $model->id . ' - ' . $model->codigo;
$this->params['breadcrumbs'][] = ['label' => 'Productos', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="productos-view">
<h1><?= Html::encode($this->title) ?></h1>
<p>
<?= Html::a('Update', ['update', 'id' => $model->id], ['class' => 'btn btn-primary']) ?>
<?= Html::a('Delete', ['delete', 'id' => $model->id], [
'class' => 'btn btn-danger',
'data' => [
'confirm' => 'Are you sure you want to delete this item?',
'method' => 'post',
],
]) ?>
</p>
<?= DetailView::widget([
'model' => $model,
'attributes' => [
'id',
'codigo',
'descripcion',
'cantidad',
'precio',
'fefecto',
],
]) ?>
</div>
功能测试脚本:
<?php
use app\models\Productos;
class ProductosCest
{
public function _before(\FunctionalTester $I)
{
//Deleting all products from database
Productos::deleteAll();
$I->amLoggedInAs(100);//Logarse
$I->amOnRoute('productos/index');
// Loading product on database
$I->haveRecord(Productos::className(), [
'id' => 1,
'codigo' => 'PA01',
'descripcion' => 'Paleta de acero triangular de 20 cm',
'cantidad' => 1,
'precio' => 10.53,
'fefecto' => '2017-03-12',
]);
}
public function _after(\FunctionalTester $I)
{
$I->click(['class' => 'btn-link']);//Logout
//Deleting all products from database
Productos::deleteAll();
}
public function deleteProducto(\FunctionalTester $I)
{
$I->amGoingTo('delete a product');
$I->amOnRoute('productos/delete', ['id' => 1]); //Click delete button from id=1
//Pulsar el botón Aceptar
/*
$I->performOn('.confirm', \Codeception\Util\ActionSequence::build()
->see('Are you sure you want to delete this item?')
->click('Aceptar')
);
*/
$I->acceptPopup();
$I->expect('be in the index product view');
$I->see('Productos', 'h1');
$I->expect('the product is not in the index product view');
$I->dontSee('Paleta de acero triangular de 20 cm');
}
}
运行测试时,我得到:
有1个失败:
1)ProductosCest:删除producto 测试测试/功能/ProductosCest.php:deleteProducto 步骤单击{“ class”:“ btn-link”} 找不到按名称显示的“失败链接”或“按钮”,或者未找到类为“ btn-link”的CSS或XPath元素。
场景步骤:
如您所见,一行出现问题:
$ I-> acceptPopup();
因为消息“在索引产品视图中”没有出现在测试日志中。
屏幕截图:
View products
答案 0 :(得分:1)
您在功能测试中使用Yii2模块,对吗? 该模块不执行javascript代码,因此不会显示确认对话框。
要测试确认对话框,必须使用acceptance
套件中通常使用的WebDriver模块。
acceptPopup方法仅适用于由window.alert,window.confirm或window.prompt创建的本机弹出窗口。 如果您使用模式窗口(看起来像您一样),则必须使用click方法来单击它。