我正在寻找一个带有pageObject设计模式和小黄瓜的代码的简单示例,因为当我遵循代码生成BDD文档时,所有示例都在tests/support/AcceptanceTester.php中编写.我不明白(英语技能差 - - )如何不将所有代码集中在AcceptanceTester.php文件中.
例如,我有一个带有两个按钮A和B的示例主页.如果用户单击按钮A,则加载页面A,否则如果用户单击按钮B,则加载页面B.
目前,我的AcceptanceTester:
<?php
// tests/_support/AcceptanceTester.php
/**
* Inherited Methods
* @method void wantToTest($text)
* @method void wantTo($text)
* @method void execute($callable)
* @method void expectTo($prediction)
* @method void expect($prediction)
* @method void amGoingTo($argumentation)
* @method void am($role)
* @method void lookForwardTo($achieveValue)
* @method void comment($description)
* @method \Codeception\Lib\Friend haveFriend($name, $actorClass = NULL)
*
* @SuppressWarnings(PHPMD)
*/
class AcceptanceTester extends \Codeception\Actor
{
use _generated\AcceptanceTesterActions;
/**
* @Given The home …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法来从命令行覆盖我的测试的基本URL.将来,我会测试很多网站,所以如果我必须在acceptance.suite.yml文件的新环境中添加每个网站,那将非常笨拙.
目前,我acceptance.suite.yml是:
actor: AcceptanceTester
modules:
enabled:
- WebDriver:
url: http://foo.com
browser: chrome
Run Code Online (Sandbox Code Playgroud)
我看到我可以使用run命令选项'override',但即使我读了代码库文档并浏览帮助网站(比如stack overflox ..),我找不到一个好的覆盖方法.有人能帮我吗?
当我打印所有配置(通过./vendor/bin/concept)时,我得到:
Array
(
actor => AcceptanceTester
modules => Array
(
enabled => Array
(
0 => Array
(
WebDriver => Array
(
url => http://foo.foo
browser => chrome
)
)
1 => \Helper\Acceptance
)
config => Array
(
)
depends => Array
(
)
)
Run Code Online (Sandbox Code Playgroud)
我试过了./vendor/bin/codecept run acceptance --steps -o 'modules: enabled: 0: WebDriver: url: http://faa.faa,但测试一直在运行http://foo.foo …
发生故障时是否有办法继续测试套件?举例:
casper.test.begin("",3,function suite(){
casper.start(url).then(function(){
test.assert(...);
test.assert(...); //If this assert fail, the script stop and the third assert isn't tested
test.assert(...);
}).run(function(){
test.done();
});
});
Run Code Online (Sandbox Code Playgroud)
我希望所有断言都经过测试,即使有些失败.可能吗?
我正在学习drupal 8.我想创建一个包含'two dimensionnal''添加另一个项目'表单的页面.我的代码几乎运行良好,但是当我向房子添加房间时我有一个奇怪的行为(我的调试日志中有一个来自FormStateInterface :: getTriggeringElement()的奇怪值,请参见底部的代码和日志)
第一:我有两个结构,房子和房间.用户可以创建一些房屋,每个房子,他可以创建一些房间:
当我添加一些房子,表格工作正常:
当我将一些房间添加到最后一个房子时,表格也可以正常工作:
但是,当我向任何"没有最后"的房子添加一些房间时,表格不能正常工作(在屏幕截图中,我点击了一次"阻止房屋"中的"添加房间",标签为"房子1"成了"房子2"(?!),点击添加5个房间(?!):
这里是我的代码和一个奇怪的调试日志,我不解释为什么我得到这个值(来自room_addMoreSubmit回调中的getTriggeringElement(),这是我认为的问题)
<?php
namespace Drupal\projet\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
class HouseForm extends FormBase {
public function getFormId(){
return 'custom_rooms_form';
}
function buildForm(array $form, FormStateInterface $form_state) {
$house_count = $form_state->get('house_count');
if (is_null($house_count)) {
$house_count = 1;
$form_state->set('house_count', $house_count);
}
$form['house'] = array(
//'#tree' => TRUE,
'#prefix' => '<div id="house-replace">',
'#suffix' => '</div>'
);
for ($house_delta = 0; $house_delta < $house_count; $house_delta++) {
if (!isset($form['house'][$house_delta])) {
$room_count[$house_delta] = $form_state->get('room_count_'.$house_delta);
if (is_null($room_count[$house_delta])) {
$room_count[$house_delta] = …Run Code Online (Sandbox Code Playgroud) 我想以编程方式创建自定义内容(通过管理UI创建的自定义内容).但是,在创建之前,我想以编程方式检查自定义内容的字段类型
我的自定义内容包含字段"body"(类型文本),字段"description"(类型文本),int字段(类型int),附加文件字段(类型fid?)...
我用Drupal 8的新api测试了几种方法,我的最后一次尝试..
// I get the entity object "my_custom_content"
$entity_object = NodeType::load("my_custom_content");
dpm($entity_object); //Work perfectly
$test = \Drupal::getContainer()->get("entity_field.manager")->getFieldDefinitions("my_custom_content",$entity_object->bundle())
//The \Drupal::getConta... Return an error : The "my_custom_content" entity type does not exist.
Run Code Online (Sandbox Code Playgroud)
使用此$ entity_object,如何获取自定义内容的字段列表?我看到了EntityFieldManager类,FieldItemList类......但我仍然不明白如何玩drupal 8/class/poo ...:/
谢谢 !
使用 Symfony 3 及其控制台,我们可以通过命令“php bin/console algorithm:mapping:import”(非常有用!)从已经存在的数据库生成实体。
从 symfony 4 开始,命令“./bin/console algorithm:mapping:import”需要一个包名,但 symfony 4 现在不适用于包。
使用新版本的 symfony,有没有一种我没有看到从现有数据库(例如 mysql)生成实体的方法?或者我必须等待新版本的学说才能拥有与 Symfony 4 兼容的“学说:映射:导入”?
我找到了一个(n)(丑陋的)解决方案。我部署了一个一次性的 symfony 3,我将 symfony 3 链接到我的数据库,并在一个包中生成实体。然后我将生成的文件复制到 symfony 4。它很难看,但它有效哈哈
从 symfony 4 开始,如何禁用 twig 缓存?
当我编辑 .html.twig 文件时,我必须通过命令“./bin/consoleclear:cache”清除缓存,以便在浏览器中查看更新后的结果。我希望它不要每次执行 shell 命令时都执行。
在 config/packages/twig.yaml 配置文件中,我添加了:
auto_reload: '%kernel.debug%'
Run Code Online (Sandbox Code Playgroud)
但没有任何改变,每次修改模板文件时我仍然必须执行cache:clear命令。
通过bash命令,我想打开一个终端,并从新终端执行一个简单的bash命令.
我尝试:
gnome-terminal -- "/bin/bash -c ls"
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
我不明白错误,我找不到任何帮助我的例子..
从一个新的 Symfony 4 项目中,当我运行这个命令时:
./node_modules/.bin/encore dev-server --hot
Run Code Online (Sandbox Code Playgroud)
然后我修改了一个 scss 文件(通过示例更改 body 标签背景颜色),shell 做出反应
但是我的浏览器不会自动刷新!我总是必须手动重新加载页面以查看最新的 css 更改。我可以在哪里做一个 mystake?
谢谢 !
=> 我用不同的浏览器测试过 => 如果我修改自定义 javascript 文件,浏览器会自动刷新!相反,当我更改 scss 文件时
=> 我的资产目录结构:
=> 我的 webpack.config.js 内容:
var Encore = require('@symfony/webpack-encore');
Encore
// directory where compiled assets will be stored
.setOutputPath('public/build/')
// public path used by the web server to access the output path
.setPublicPath('/build')
// only needed for CDN's or sub-directory deploy
//.setManifestKeyPrefix('build/')
/*
* ENTRY CONFIG
*
* Add 1 entry for …Run Code Online (Sandbox Code Playgroud) 在代码接收中,我想检查页面中是否存在某个元素,并再次测试第一个元素是否存在。我可以简单地做到这一点:
// $I is a AcceptanceTester Object and extends \Codeception\Actor class
try{
$I->see('.firstElement');
}catch(ElementNotFound $e){
// do some actions
}
// do some anothers actions
Run Code Online (Sandbox Code Playgroud)
但是,如果这样做,我可以在报告文件中看到该行"I see '.firstElement'"。我不想在此报告中看到此测试。
我的问题:如何安静地调用\ Codeception \ Actor方法?我只想做一个简单的DOM元素html检查,而不是将此操作打印到生成的报告中
codeception ×3
symfony4 ×3
drupal-8 ×2
php ×2
symfony ×2
assert ×1
bash ×1
casperjs ×1
css ×1
doctrine ×1
drupal-ajax ×1
drupal-forms ×1
drupal-nodes ×1
gherkin ×1
javascript ×1
pageobjects ×1
testing ×1