pstephan1187 / laravel-jtest
允许通过Selenium测试启用JavaScript的页面。
Requires
- facebook/webdriver: ~1.2.0
- laravel/framework: ^5.1
- phpunit/phpunit: ^5.0
README
Laravel JTest是一个用于运行自动化浏览器测试的包,针对基于Laravel的应用程序。它专门设计为能够测试启用JavaScript的代码。
安装
composer require pstephan1187/laravel-jtest
然后在您的PHPUnit测试中,扩展JTest\JTestCase
类,并将baseUrl
属性设置为您的应用程序URL
<?php
use JTest\JTestCase;
class MyTestClass extends JTestCase
{
protected $baseUrl = 'http://localhost:8888';
//...
}
您还可以设置要测试的浏览器(默认为Chrome)
protected $browser = 'firefox';
您还需要确保已安装并运行Selenium Stand-Alone Server。您可以从此处下载Selenium。您可以通过在包含selenium服务器二进制文件的目录中执行此命令来运行selenium
java -jar selenium-server-standalone-x.x.x.jar
请确保使用您下载的实际版本号。
使用方法
JTest使用链式方法结构。这允许您按顺序连续运行每个方法。以下是一个如何使用JTest的基本示例
public function testUserCanLogin()
{
$this->visit('/')
->click('Login')
->seePageIs('/auth/login')
->type('user.email@example.com', '#email')
->type('user_p@ssw0rd', '#password')
->press('form#login input[type=submit]')
->seePageIs('/dashboard');
}
方法
setWindowSize($width, $height)
这允许您强制浏览器窗口大小为特定维度。宽度和高度都是必需的,且必须是像素值。浏览器将在打开下一个窗口时调整大小。建议在运行visit
命令之前运行此命令,以便窗口立即调整为所需大小。
visit($uri)
将浏览器导航到指定的路径。baseUrl
将附加到$uri
上。如果您将baseUrl
设置为'http://localhost:8000',然后运行$this->visit('/my-page')
,则浏览器将导航到'http://localhost:8000/my-page'。
seePageIs($url)
这将断言当前URL是baseUrl
加上给定的URL。考虑到当前URL为'http://localhost:8000/my-page',而baseUrl
为'http://localhost:8000',则seePageIs('/my-page')
将通过。
type($text, $selector)
这将把给定的文本输入到第一个匹配给定CSS选择器的元素中。
press($selector)
这将执行第一个匹配给定CSS选择器的元素上的点击事件。
click($text)
这将执行第一个匹配文本的链接("a"标签)上的点击事件。
select($values, $selector)
这将选择任何文本或值与给定值匹配的选项,这些选项位于第一个匹配给定CSS选择器的元素中。$values
可以是数组或单个项。
file($file_path, $selector)
这将选择位于$file_path
的第一个匹配给定CSS选择器的文件输入中的文件。
submit($selector)
这将提交第一个匹配给定CSS选择器的表单。
see($text)
这将断言给定的文本在页面上可见。
notSee($text)
这将断言给定的文本在页面上不可见。
seeOneOf($text_options)
这将断言给定的文本选项之一在页面上可见。
seeNumberOfElements($number, $selector)
这将断言给定的CSS选择器返回指定的元素数量
seeValueOfInput($value, $selector)
这将断言找到的第一个匹配给定CSS选择器的输入元素具有与其值匹配的值属性。
seeOptionsAreSelected($options, $selector)
这将断言在第一个匹配给定CSS选择器的元素中,给定的每个选项都被选中。 $options
将基于选项元素的文本或其值进行匹配。 $options
可以接受一个项目数组或单个项目。
seeOptionIsSelected($option, $selector)
这是 seeOptionsAreSelected
的别名
seeInElement($text, $selector)
这将断言找到的第一个匹配给定CSS选择器的元素包含给定的文本。如果 $text
是一个数组,这将断言所有给定项目都位于匹配元素中。
getCurrentUrl()
这将返回浏览器当前所在的URL。此方法不允许进一步链式调用。
dump($var)
这将把给定的变量输出到控制台。
wait($seconds)
这将暂停测试执行指定的秒数。
waitUntilElementExists($selector, $timeout = 5, $interval = 200)
这将暂停测试执行,直到存在一个匹配给定选择器的元素。元素将在每个 $interval
毫秒内检查,直到 $timeout
秒过去。
waitUntilElementVisible($selector, $timeout = 5, $interval = 200)
这将暂停测试执行,直到匹配给定选择器的元素可见。元素将在每个 $interval
毫秒内检查,直到 $timeout
秒过去。
waitUntilText($text, $timeout = 5, $interval = 200)
这将暂停测试执行,直到页面上存在给定的文本。文本将在每个 $interval
毫秒内检查,直到 $timeout
秒过去。
element($selector, $callback)
这将找到第一个匹配给定CSS选择器的元素,将其传递给回调,执行回调,然后继续测试。以下示例找到第一个 h1
标签,然后在其上搜索按钮,然后点击按钮。
$this->element('h1', function($element){
$element->findElement('button')->click()
});
传递给回调的 $element
是类型 Facebook\WebDriver\WebDriverElement
。 更多信息。
elements($selector, $callback)
与 element
的行为相同,但将所有匹配的元素传递给回调,而不是只传递第一个。