Javascript 如何使用Behat/Mink和selenium独立服务器测试引导模式
我只想简单介绍一件我尝试了很长时间的事情,最近我发现了一种简单的方法。我将使用Behat/Mink和selenium独立服务器测试引导模式 工具:Javascript 如何使用Behat/Mink和selenium独立服务器测试引导模式,javascript,selenium,testing,behat,mink,Javascript,Selenium,Testing,Behat,Mink,我只想简单介绍一件我尝试了很长时间的事情,最近我发现了一种简单的方法。我将使用Behat/Mink和selenium独立服务器测试引导模式 工具: “behat/behat v3.*” “behat/mink v1.7” “behat/mink扩展v2.2” “behat/mink-selenium2-driver v*” “Firefox 46.0.1” “selenium-server-standalone-2.53.1” 首先,我们需要初始化行为并对其进行配置。在我的例子中,我将所有测
- “behat/behat v3.*”
- “behat/mink v1.7”
- “behat/mink扩展v2.2”
- “behat/mink-selenium2-driver v*”
- “Firefox 46.0.1”
- “selenium-server-standalone-2.53.1”
- 根文件
- 文件夹1
- 文件夹2
- 文件夹n
- 测验
- 比哈特
- 上下文
- 小黄瓜
- 比哈特
- 行为
默认
套件中的过滤器内部的~@javascript
标记,我们告诉您,要从该上下文中排除标记为@javascript
的所有功能。另外,请注意,在第二套(浏览器)
,在本例中,我们告诉behat只执行标记为@browser
的功能
请参见下面的behat.yml的外观:
default:
suites:
default:
paths: [%paths.base%/tests/behat/gherkin/custom.feature]
contexts: [Tests\behat\features\FeatureContext]
filters:
tags: ~@javascript
# Browser inteaction
browser:
paths: [%paths.base%/tests/behat/gherkin/browser.feature]
contexts: [Tests\behat\features\BrowserContext]
filters:
tags: "@browser"
extensions:
Behat\MinkExtension:
selenium2: ~
#wd_host: "http://127.0.0.1:4444/wd/hub"
base_url: "http://localhost/"
接下来,我们需要创建一个至少有一个场景要测试的特性。在这种情况下,我们必须假设有一个网页带有一个触发模式的按钮,并且模式将包含文本“Hello wold!”
请参见下面的“此功能的外观”:
Feature: Testing a bootstrap modal
In order test javascript with behat/mink
As a user
I want to check a bootstrap modal
@javascript @browser
Scenario: Check a bootstrap modal text
Given I am on "some-page"
When I press "some-button"
Then An alert modal should show up with:
"""
Hello world!
"""
最后,这是上下文的外观:
<?php
use Behat\Behat\Context\Context;;
use Behat\Gherkin\Node\PyStringNode;
use PHPUnit_Framework_TestCase as PHPUnit;
use Behat\MinkExtension\Context\MinkContext;
use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Behat\Tester\Exception\PendingException;
class BrowserContext extends MinkContext implements Context, SnippetAcceptingContext
{
private $baseUrl;
public function __construct($baseUrl = "http://localhost/")
{
$this->baseUrl = $baseUrl;
}
/**
* @Then An alert modal should show up with:
*/
public function anAlertModalShouldShowUpWith(PyStringNode $message)
{
//prepare the js script
//here we are checking if th emodal is visible
$script = "(function(){return ($('#myModal').is(':visible'));})();";
//store the result of the js code
$result = $this->getSession()->evaluateScript($script);
//check for true with phpunit
PHPUnit::assertTrue($result);
//prepare the js script
//here we are getting all the modal html as a string
$script = "(function(){return $('#myModal').html();})();";
//store the result of the js code
$result = $this->getSession()->evaluateScript($script);
//check if the string contains our message
PHPUnit::assertContains($message->getRaw(), $result);
}
}