长话短说,我有一个 Web 应用程序,其中有一个按钮可以触发 2 个异步 ajax 调用。2 个 ajax 调用使用的参数实际上是应用程序中设置的 JavaScript 变量。当两个 ajax 调用完成后,将使用初始 ajax 调用之一的结果执行第三个 ajax 调用。第三个 ajax 调用完成后,会在内容中添加一个新的 div。
到目前为止,我将 CodeCeption 与 WebDriver 结合使用,其中上述功能可以通过两个简单的操作轻松模拟:
$I->click(button)
$I->waitForElementVisible(newdiv)
Run Code Online (Sandbox Code Playgroud)
我现在尝试使用 PhpBrowser 模拟相同的内容,但我不确定如何解决这个问题:
1.由于PhpBrowser不使用javascript,我如何在2个ajax调用中发送javascript参数?
2.由于PhpBrowser中没有可用的waitforelement函数,我是否需要手动触发所有3个ajax调用?或者PhpBrowser是否能够手动执行两个ajax调用的回调并自动触发第三个?
我正在尝试按照此处的步骤在 symfony 3 框架上安装 codeception:
http://codeception.com/for/symfony
当我跑步时
php bin/codecept bootstrap --empty
Run Code Online (Sandbox Code Playgroud)
我收到错误
无法打开输入文件:bin/codecept
我尝试以管理员身份在 Windows 命令行上安装它。
但从输出看来,由于警告,bin 目录中的文件 codecept 未创建:
E:\projektai\php projektai\htdocs\timetracker>composer require codeception/codec
eption --dev
Warning: This development build of composer is over 60 days old. It is recommend
ed to update it by running "C:\ProgramData\Composer\bin\composer.phar self-updat
e" to get the latest version.
Using version ^2.2 for codeception/codeception
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload …Run Code Online (Sandbox Code Playgroud) 测试开始于 \xe4\xb8\x8b\xe5\x8d\x885:45 ...
\n/usr/local/bin/php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9001 -dxdebug.remote_host=127.0.0.1 /var/www/example/vendor/phpunit/phpunit/phpunit --no-configuration --filter "/(::testMerlinTemplate)( .*)?$/" tests\\jobs\\SettlementJobTest /var/www/example/tests/unit/jobs/SettlementJobTest.php --teamcity\nPHPUnit 7.1.4 by Sebastian Bergmann and contributors.\n\n\nCodeception\\Exception\\InjectionException : Service di is not defined and can't be accessed from a test\n /var/www/example/vendor/codeception/base/src/Codeception/Test/Metadata.php:191\n /var/www/example/vendor/codeception/base/src/Codeception/Test/Unit.php:47\nRun Code Online (Sandbox Code Playgroud)\n 我正在尝试学习Codeception并将它与Yii(我也是新手)一起使用.
开箱即用,我在运行测试时遇到了一些问题.我已经浏览了快速入门指南,当我通过终端运行时,我收到此错误:
Codeception PHP Testing Framework v1.6.6
Powered by PHPUnit 3.7.24 by Sebastian Bergmann.
[Exception]
DateTime::__construct(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date
_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the tim
ezone identifier. We selected 'America/Chicago' for 'CDT/-5.0/DST' instead
Run Code Online (Sandbox Code Playgroud)
现在,我正在使用MAMP,并在我的php.ini文件中设置了时区.我也试过在index.php文件中手动设置它_default_timezone_set('America/Chicago');,我仍然得到相同的消息.
当我使用Yii时,我已经尝试为Codeception启用Yii模块,但这似乎没有任何区别.
更新
我已经尝试在非基于yii的项目上安装代码,所以一个直接的网站,我得到与上面完全相同的错误.
我正在为我们的内部CMS设置一系列自动化测试.
在这个时刻,我希望能够测试我们的测试页面中是否有某些图像.
如果图像存在,我可以检查将显示的标题...
$I->see('Image Caption');
Run Code Online (Sandbox Code Playgroud)
...但我真的希望能够检查图像本身的存在......
$I->seeImage('/path_to/image_file.jpg'); // I MADE THAT METHOD UP
Run Code Online (Sandbox Code Playgroud)
......或者至少是img标签......
$I->seeSourceCode('<img src="/path_to/image_file.jpg"'); // I MADE THAT METHOD UP TOO
Run Code Online (Sandbox Code Playgroud)
有谁知道如何做到这一点?
我得到的印象是代码文档已经过时了.
我有Cept文件使用userteps定义文件,我用于登录调用等事情.
由于复杂性,我喜欢使用Cest类,但我不能让他们识别我的Usersteps.这是一个例子:
<?php
/*
* @guy TestGuy\UserSteps
*/
class ViewPagesCest {
public function testViewCharacter(TestGuy $I) {
$I->loginToCharacter('admin', 'admin', 'Alice Kepler');
$target = $I->grabFromRepository('BM2SiteBundle:Character', 'id', array('name' => 'Carol Stanis'));
$I->amOnPage('/en/character/view/'.$target->getId());
$I->see($target->getName());
}
Run Code Online (Sandbox Code Playgroud)
}
我当然得到了:
[RuntimeException]调用未定义的方法TestGuy :: loginToCharacter
因为loginToCharacter是在usersteps文件中定义的.与Cept文件相同的东西工作得很好.我错过了什么?
我正在运行Vagrant(宅基地),PHP 5.5.12和Laravel 4.2.我正在尝试配置代码以使用测试环境进行验收测试(在phantomJS上运行).在宅基地上我有两个环境:本地和测试.我小心不要在默认的'testing'环境中加倍,这个环境是为PHPUnit测试保留的.
我的问题是虽然我可以使用Eloquent来实例化用户(并检索它),但我无法对该用户进行任何测试的身份验证.这使我无法运行我的测试套件,其中90%需要用户身份验证.
我在/ etc/nginx/sites-available中定义了两个站点:myapp.app和myapp.test.我将fastcgi_param APP_ENV定义为本地和测试(分别).我还在〜/ .bashrc中指定了APP_ENV,所以echo $ APP_ENV返回'local'.我创建了相应的config/test文件夹,其中包含指向测试数据库的database.php凭据.下面是默认的codeception.yml设置,以及那些被acceptance.suite.yml设置覆盖的设置(这是我专门运行的套件).
我无法在测试环境中进行身份验证.所有尝试这样做都会返回false或null.
actor: Tester
paths:
tests: tests
log: tests/_output
data: tests/_data
helpers: tests/_support
settings:
bootstrap: _bootstrap.php
colors: true
memory_limit: 1024M
modules:
config:
Db:
dsn: 'pgsql:host=localhost;dbname=myapp'
user: 'myapp'
password: 'myapp'
dump: tests/_data/dump.sql
Run Code Online (Sandbox Code Playgroud)
class_name: AcceptanceTester
modules:
enabled:
- Laravel4
- AcceptanceHelper
- WebDriver
- Db
config:
WebDriver:
url: 'http://myapp.test'
browser: phantomjs
window_size: 1024x768
Db:
dsn: 'pgsql:host=localhost;dbname=myapp_testing'
user: 'myapp_testing'
password: 'myapp_testing'
dump: tests/_data/test-dump.sql
populate: true
cleanup: false
Run Code Online (Sandbox Code Playgroud)
此接受帮助程序编译到AcceptanceTester类中,并在需要身份验证的所有Cests上的before过滤器中运行.我在这里测试了User :: create方法的输出,它确实创建了一个我可以访问的用户对象,例如,在login方法中.但是,它不会出现在我的数据库中(从Navicat查看).数据库当前是从test-dump.sql文件填充的,并且只包含没有任何数据的模式.我不确定为什么Eloquent创建方法不会写入数据库,但我最好的猜测是在测试套件运行后数据库正在回滚.
<?php …Run Code Online (Sandbox Code Playgroud) 我按照这些指南开始为我们的API编写测试
不幸的是,文件夹tests/api中没有名为ApiTester.php的文件,所以正在运行
php codecept.phar run
Run Code Online (Sandbox Code Playgroud)
给我这样的错误:
[PHPUnit_Framework_Exception]
fopen(/Users/jj/Development/codeception/tests/api/ApiTester.php): failed to open stream: No such file or directory
Run Code Online (Sandbox Code Playgroud) 我是Codeception框架的新手,并尝试从此目录运行单元测试脚本:
tests/codeception/frontend/unit
Run Code Online (Sandbox Code Playgroud)
用于测试的数据库配置已在config-local.php中完成.
现在,我的问题是如何运行测试脚本?我试图从终端运行以下命令:
frontend tests
cd frontend
codecept build
codecept run
Run Code Online (Sandbox Code Playgroud)
但它说Codecept:命令未找到.
Safari 10.0.1 macOS Sierra
运行Codeception命令时:
$I->waitForElementVisible(['css' => 'input[type=text][id=UserUsername]'], 30);
Run Code Online (Sandbox Code Playgroud)
在使用Selenium 3.0.1的Safari验收测试中,我收到错误消息.失败时拍摄的屏幕截图清楚地显示了相关元素.Firefox和Chrome中的相同测试/命令都是成功的.错误:
Screenshot saved to /Applications/MAMP/htdocs/AutomatedTests/tests/_output/debug/FAILED1479307207.png
Unable to retrieve Selenium logs : The command 'GET /session/9BC56414-8934-4315-9293-B6E99720E318/log/types' is not implemented.
Command duration or timeout: 3 milliseconds
Build info: version: '3.0.1', revision: '1969d75', time: '2016-10-18 09:48:19 -0700'
System info: host: 'Cosettes-MacBook-Pro.local', ip: '10.0.1.75', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.12.1', java.version: '1.8.0_101'
Driver info: org.openqa.selenium.safari.SafariDriver
Capabilities [{applicationCacheEnabled=true, rotatable=false, databaseEnabled=true, handlesAlerts=true, version=12602.2.14.0.5, cleanSession=true, platform=MAC, nativeEvents=true, locationContextEnabled=false, webStorageEnabled=true, browserName=safari, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 9BC56414-8934-4315-9293-B6E99720E318 …Run Code Online (Sandbox Code Playgroud) codeception ×10
php ×6
cmd ×1
image ×1
laravel ×1
phpunit ×1
safari ×1
safaridriver ×1
selenium ×1
symfony ×1
testing ×1
unit-testing ×1
yii ×1
yii2 ×1