我有一个简单的问题,希望有人能及时解决。
我刚刚使用 Codeception 运行一些验收测试,并尝试单击图像类型的提交按钮:
<div id="payment">
<input name="submit" type="image" value="" alt="Review your order" src="/images/buttons/pay-securely.png">
</div>
Run Code Online (Sandbox Code Playgroud)
简单地使用 $I->click() 会导致测试失败:
$I->click('#payment > input[name=submit]');
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
当我尝试单击链接时,我使用 codeception 进行的一项测试出现问题,窗口滚动到浏览器认为它应该去的位置,但是,我的网站有一个导航栏附加到窗口底部,所以当浏览器停止滚动,底部导航覆盖链接。
因此,测试失败。有谁知道如何将其配置为滚动得更远一点?使用 Codeception 1.8.5。
谢谢
我有一个表单,当填写并单击时,会将邮政编码列表返回到隐藏字段。我想断言字段列表已填满。但是,我不想根据任何特定列表检查字段值,以便将来更改人口普查或邮政信息。如何使用 Codeception 的 WebDriver 简单地断言某个字段不为空?我尝试使用
$set_zips = $I->grabValueFrom('#zips');
$this->assertFalse(empty($set_zips));
Run Code Online (Sandbox Code Playgroud)
和
$I->cantSeeInField('#zips', '')`
Run Code Online (Sandbox Code Playgroud)
但一直无法得到验证,即使该字段实际上已填满。
对不起,我的英语不好。我才开始使用代码接收。一次验收测试需要使用两个 url(网站(url:example.com)和管理员界面(url:edit-example.com))。但我不知道如何实现这一点。我尝试做这样的事情:
接受.suite.yml
modules:
enabled:
- WebDriver:
url: example.com
Run Code Online (Sandbox Code Playgroud)
testCept.php
$website = example.com
$adm_int = edit-example.com
$I = new AcceptanceTester($scenario);
// Go to website and do some actions
$I->amOnPage($website);
// some code
// Then go to administrator interface and do some actions
$I->amOnPage($adm_int);
//some code
// Then I go again to website and look that changes confirmed
$I->amOnPage($website);
// some code
Run Code Online (Sandbox Code Playgroud)
但在本例中,网站的 url 与配置文件 Acceptance.suite.yml 中指定的 url 连接。测试转到 url example.com/example.com,如果使用管理员界面,则转到 example.com/edit-example.com。
问题出在配置文件acceptance.suite.yml 中指定的url 中。如果我从此配置文件中删除 url - codeception 返回异常:
[Codeception\Exception\ModuleConfigException]
WebDriver …Run Code Online (Sandbox Code Playgroud) 我正在学习Codeception,我想知道什么时候应该使用setUp()或tearDown(),什么时候应该使用_before()或_after()。我看不出有什么区别。这两种方法都是在我的测试文件中的单个测试之前或之后运行吗?谢谢,
使用 Codeception 时,我希望能够在 Gherkin 功能文件中使用 PhpStorm 的“转到声明”功能(Mac 上的Command + B)。但是,PhpStorm 似乎没有弄清楚步骤在哪里定义,并输出以下警告:
未定义的步骤参考:[…]
当我使用 Behat 时,PhpStorm 了解步骤的定义位置。
mkdir codeceptioncd codeceptioncomposer require "codeception/codeception" --dev./vendor/bin/codecept bootstrap./vendor/bin/codecept generate:feature acceptance first
tests/acceptance/first.feature../vendor/bin/codecept gherkin:snippets acceptance这导致以下代码。(并非所有内容都包括在内——如果我需要添加任何内容,请告诉我。)
tests/acceptance/first.feature:
Feature: first
In order to ...
As a ...
I need to ...
Scenario: try first
When I visit "/"
Run Code Online (Sandbox Code Playgroud)
tests/_support/AcceptanceTester.php: …
目前正在从事一个学徒项目。我做了一些自动化测试。我通过运行和构建套件来初始化代码接收
codecept bootstrap
codecept build
Run Code Online (Sandbox Code Playgroud)
这两个命令按预期工作,但是当我尝试运行测试时,我得到了
FATAL ERROR. TESTS NOT FINISHED.
Class 'Yii' not found
in /srv/http/blog/vendor/codeception/codeception/src/Codeception/Module/Yii2.php:242
Run Code Online (Sandbox Code Playgroud)
有什么想法吗?我查看了 Yii 和 Codeceptions 文档,但找不到解决方案。
更新 新的错误消息
FATAL ERROR. TESTS NOT FINISHED.
Class 'Yii' not found
in /srv/http/blog/vendor/yiisoft/yii2/helpers/BaseUrl.php:129
Run Code Online (Sandbox Code Playgroud) 如何在代码接收中跳过多个组?就像是:
--skip-group wip someFeature
Run Code Online (Sandbox Code Playgroud)
我打算通过@wip和跳过场景@someFeature
正确的语法是什么?
我有负责获取各种 api 来收集数据的应用程序。我使用 Codeception 作为我的测试框架,我需要在我的功能测试中模拟 API 客户端类,如下所示:
public function testFetchingNewApps(FunctionalTester $I) {
$request = new Request(
SymfonyRequest::METHOD_GET,
'https://url.com/get'
);
$apiClientMock = \Mockery::mock(HttpClientInterface::class);
$apiClientMock
->shouldReceive('send')
->with($request)
->andReturn(new Response(HttpCode::OK, [], '{"data":"some data"}'))
->once();
$symfony = $this->getModule('Symfony')->grabService('kernel')->getContainer()->set(HttpClientInterface::class, $apiClientMock);
$symfony->persistService(HttpClientInterface::class, false);
$I->runShellCommand('bin/console sync:apos --env=test');
}
Run Code Online (Sandbox Code Playgroud)
但是从 Symfony 4 开始,我们无法访问私有服务来模拟它们,我看到了类似的错误
服务是私有的,您无法替换它。
所以我发现我可以创建ApiClinetMock.php扩展真实ApiCLient.php文件和services_test.yml文件。并且在services_test.ymlI can make ApiClinetMock.phpas a public service 并将其与接口相关联(覆盖接口使用):
#services_test.yml
services:
_defaults:
public: true
Api\Tests\functional\Mock\ApiClientMock: ~
ApiHttpClients\HttpClientInterface: '@Api\Tests\functional\Mock\ApiClientMock'
Run Code Online (Sandbox Code Playgroud)
现在,当我运行我的测试用例时,我没有看到任何错误,例如
服务是私有的,您无法替换它。
但是我的模拟不起作用并返回真实数据而不是我在模拟中设置的数据,我不知道为什么。
可能的解决方案是覆盖我在 ApiClientMock 中需要的方法以返回我需要的数据,但它仅适用于一个测试用例,但我需要测试各种不同的有效/无效响应。
我知道 Symfony …
我在 Symfony4 中有一个带有 DB 主义的项目,一切顺利。
我想使用 Codeception 添加一些功能和单元测试。我按照文档并将其添加到我的功能性.suite.yml中:
actor: FunctionalTester
modules:
enabled:
- Symfony:
app_path: 'src'
environment: 'test'
- Doctrine2:
depends: Symfony
# cleanup: true
- \Helper\Functional
# - Db
step_decorators: ~
Run Code Online (Sandbox Code Playgroud)
然而,当运行vendor/bin/codecept run时,我得到了一个丑陋的结果:
在 EnvVarProcessor.php 第 131 行:
未找到环境变量:“DATABASE_URL”。
我在文档中看不到任何其他相关内容,所以不确定我错过了什么。