diff --git a/composer.json b/composer.json index 65db02b..3f372ec 100644 --- a/composer.json +++ b/composer.json @@ -7,8 +7,10 @@ "license": "BSD-3-Clause", "require": { "php": ">=5.3.1", - "behat/mink-extension": "~2.0@dev", - "qa-tools/qa-tools": "*@dev" + "behat/mink-extension": "~2.0", + "qa-tools/qa-tools": "~1.0@dev", + "mindplay/annotations": "~1.2@dev", + "symfony/yaml": "2.6.4" }, "require-dev": { "aik099/coding-standard": "dev-master", diff --git a/example/behat.yml b/example/behat.yml deleted file mode 100644 index 267dd2c..0000000 --- a/example/behat.yml +++ /dev/null @@ -1,23 +0,0 @@ -default: - suites: - standard: - paths: ['features'] - contexts: [MainContext] - - extensions: - Behat\MinkExtension: - default_session: selenium2 - javascript_session: selenium2 - base_url: 'http://localhost' - - selenium2: ~ - - QATools\BehatExtension: - qa_tools: - base_url: 'http://localhost' - namespace: - pages: pages - users: - test: - firstname: michael - lastname: geppert \ No newline at end of file diff --git a/example/composer.json b/example/composer.json deleted file mode 100644 index 20bdb3a..0000000 --- a/example/composer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "qa-tools/behat-extension-example", - "license": "BSD-3-Clause", - "require": { - "php": ">=5.3.1", - "qa-tools/qa-tools": "~1.0@dev", - "qa-tools/behat-extension": "~1.0@dev", - "mindplay/annotations": "~1.2@dev", - "behat/mink": "~1.5@dev", - "behat/mink-selenium2-driver": "~1.1@dev" - }, - "repositories": [ - { - "type": "vcs", - "url": "https://github.com/qa-tools/behat-extension" - } - ], - "autoload-dev": { - "psr-0": { - "pages": "" - } - }, - "config": { - "bin-dir": "bin/" - } -} diff --git a/example/features/bootstrap/MainContext.php b/example/features/bootstrap/MainContext.php deleted file mode 100644 index 6b65cf6..0000000 --- a/example/features/bootstrap/MainContext.php +++ /dev/null @@ -1,25 +0,0 @@ -qaTools->getActivePage()->enter(); - } - - /** - * @Given /^the user waits for ([0-9]+) seconds$/ - */ - public function waitFor($seconds) - { - sleep($seconds); - } - -} diff --git a/example/features/test.feature b/example/features/test.feature deleted file mode 100644 index ddbb471..0000000 --- a/example/features/test.feature +++ /dev/null @@ -1,10 +0,0 @@ -Feature: Login - In order to use the website site - As a website user - I need to login successfully - - @javascript @login @failing-login - Scenario: Testscenario - Given the user visits the "TestPage" - When the user does the tests - And the user waits for 10 seconds diff --git a/example/fixtures/index.html b/example/fixtures/index.html deleted file mode 100644 index bcc4008..0000000 --- a/example/fixtures/index.html +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/example/pages/TestPage.php b/example/pages/TestPage.php deleted file mode 100644 index 9967fb4..0000000 --- a/example/pages/TestPage.php +++ /dev/null @@ -1,48 +0,0 @@ - - */ - -namespace pages; - - -use QATools\QATools\HtmlElements\TypifiedPage; -use QATools\QATools\PageObject\Element\WebElement; - -/** - * Class TestPage - * - * @page-url('/example/fixtures/') - */ -class TestPage extends TypifiedPage -{ - - /** - * Input elements. - * - * @var WebElement - * @find-by('css' => 'input[name*=test]') - */ - protected $inputs; - - /** - * Test function. - * - * @return void - */ - public function enter() - { - $this->inputs->click(); - } - - public function waitFor($timeout, $callback) - { - return ; - } - -} diff --git a/src/QATools/BehatExtension/Context/QAToolsContext.php b/src/QATools/BehatExtension/Context/QAToolsContext.php index dd49260..c26d2e1 100644 --- a/src/QATools/BehatExtension/Context/QAToolsContext.php +++ b/src/QATools/BehatExtension/Context/QAToolsContext.php @@ -13,6 +13,8 @@ use Behat\Behat\Context\Context; use QATools\BehatExtension\QATools; +use QATools\QATools\PageObject\IPageFactory; +use QATools\QATools\PageObject\Page; class QAToolsContext implements Context, IQAToolsAwareContext { @@ -25,9 +27,23 @@ class QAToolsContext implements Context, IQAToolsAwareContext protected $qaTools; /** - * Sets the QA-Tools instance. + * The used page factory. * - * @param QATools $qa_tools QA-Tools instance. + * @var IPageFactory + */ + protected $pageFactory; + + /** + * The current page. + * + * @var Page + */ + protected $page; + + /** + * Set QA-Tools instance. + * + * @param QATools $qa_tools Instance of QA-Tools. * * @return static */ @@ -38,6 +54,20 @@ public function setQATools(QATools $qa_tools) return $this; } + /** + * Set page factory. + * + * @param IPageFactory $page_factory Used page factory. + * + * @return static + */ + public function setPageFactory(IPageFactory $page_factory) + { + $this->pageFactory = $page_factory; + + return $this; + } + /** * BeforeStep hook to init QA-Tools. * @@ -49,6 +79,8 @@ public function initSession() { $this->qaTools->init(); + $this->pageFactory = $this->qaTools->getPageFactory(); + return $this; } @@ -57,14 +89,15 @@ public function initSession() * * @param string $page Name of page. * + * @Given /^I visit the "([^"]+)"$/ * @Given /^the user visits the "([^"]+)"$/ * * @return void */ public function visitPage($page) { - $page = $this->qaTools->getPage($page); - $page->open(); + $this->page = $this->pageFactory->getPage($page); + $this->page->open(); } } diff --git a/src/QATools/BehatExtension/QATools.php b/src/QATools/BehatExtension/QATools.php index a9622df..314bc97 100644 --- a/src/QATools/BehatExtension/QATools.php +++ b/src/QATools/BehatExtension/QATools.php @@ -13,9 +13,8 @@ use Behat\Mink\Mink; use Behat\Mink\Session; -use QATools\QATools\HtmlElements\TypifiedPageFactory; use QATools\QATools\PageObject\Config\Config; -use QATools\QATools\PageObject\Page; +use QATools\QATools\PageObject\IPageFactory; class QATools { @@ -48,13 +47,6 @@ class QATools */ protected $users = array(); - /** - * The current active page. - * - * @var Page - */ - protected $activePage; - /** * Default constructor. * @@ -87,40 +79,25 @@ public function init() } /** - * Get page with given name. - * - * @param string $name Name of the page. + * Creates a page factory. * - * @return Page + * @return IPageFactory */ - public function getPage($name) + protected function createPageFactory() { - $class = (isset($this->config['namespace']['pages']) ? - '\\' . $this->config['namespace']['pages'] . '\\' : '') . $name; - - $this->activePage = $this->pageFactory->getPage($class); + $page_factory = $this->config['page_factory']; - return $this->activePage; + return new $page_factory($this->session, new Config($this->config['qa_tools'])); } /** - * Get active page. - * - * @return Page - */ - public function getActivePage() - { - return $this->activePage; - } - - /** - * Creates a page factory. + * Get active page factory. * * @return IPageFactory */ - public function createPageFactory() + public function getPageFactory() { - return new TypifiedPageFactory($this->session, new Config($this->config['qa_tools'])); + return $this->pageFactory; } } diff --git a/src/QATools/BehatExtension/ServiceContainer/BehatExtension.php b/src/QATools/BehatExtension/ServiceContainer/BehatExtension.php index 4a2f28f..627ee22 100644 --- a/src/QATools/BehatExtension/ServiceContainer/BehatExtension.php +++ b/src/QATools/BehatExtension/ServiceContainer/BehatExtension.php @@ -11,20 +11,17 @@ namespace QATools\BehatExtension\ServiceContainer; -use Behat\Behat\Context\ServiceContainer\ContextExtension; -use Behat\Mink\Mink; use Behat\Testwork\ServiceContainer\Extension; use Behat\Testwork\ServiceContainer\ExtensionManager; use QATools\BehatExtension\QATools; use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; +use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; -use Symfony\Component\DependencyInjection\Definition; +use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; class BehatExtension implements Extension { - const INITIALIZER_CLASS = 'QATools\\BehatExtension\\Context\\Initializer\\QAToolsInitializer'; - /** * QA-Tools instance. * @@ -60,15 +57,9 @@ public function configure(ArrayNodeDefinition $builder) ->scalarNode('base_url') ->defaultNull() ->end() - ->end() - ->end() - ->arrayNode('namespace') - ->children() - ->scalarNode('pages') - ->defaultNull() - ->end() - ->scalarNode('elements') - ->defaultNull() + ->arrayNode('page_namespace_prefix') + ->requiresAtLeastOneElement() + ->prototype('scalar')->end() ->end() ->end() ->end() @@ -78,6 +69,10 @@ public function configure(ArrayNodeDefinition $builder) ->scalarNode('firstname')->end() ->scalarNode('lastname')->end() ->end() + ->end() + ->end() + ->scalarNode('page_factory') + ->defaultValue('\QATools\QATools\HtmlElements\TypifiedPageFactory') ->end() ->end(); } @@ -87,37 +82,10 @@ public function configure(ArrayNodeDefinition $builder) */ public function load(ContainerBuilder $container, array $config) { - $this->loadQATools($container, $config); - $this->loadInitializer($container); - } - - /** - * Load and create QA-Tools. - * - * @param ContainerBuilder $container Given container builder. - * @param array $config Config. - * - * @return void - */ - protected function loadQATools(ContainerBuilder $container, array $config) - { - /** @var Mink $mink */ - $mink = $container->get('mink'); - $this->qaTools = new QATools($mink, $config); - } + $loader = new YamlFileLoader($container, new FileLocator(__DIR__)); + $loader->load('config/services.yaml'); - /** - * Load initializer. - * - * @param ContainerBuilder $container Given container builder. - * - * @return void - */ - protected function loadInitializer(ContainerBuilder $container) - { - $definition = new Definition(self::INITIALIZER_CLASS, array($this->qaTools)); - $definition->addTag(ContextExtension::INITIALIZER_TAG, array('priority' => 0)); - $container->setDefinition('qa-tools.context_initializer', $definition); + $container->setParameter('qa_tools.behat-extension.config', $config); } /** @@ -125,7 +93,6 @@ protected function loadInitializer(ContainerBuilder $container) */ public function process(ContainerBuilder $container) { - echo 'process'; } } diff --git a/src/QATools/BehatExtension/ServiceContainer/config/services.yaml b/src/QATools/BehatExtension/ServiceContainer/config/services.yaml new file mode 100644 index 0000000..6a92cdd --- /dev/null +++ b/src/QATools/BehatExtension/ServiceContainer/config/services.yaml @@ -0,0 +1,11 @@ +parameters: + +services: + qa_tools: + class: QATools\BehatExtension\QATools + arguments: ["@mink", "%qa_tools.behat-extension.config%"] + qa_tools_initializer: + class: QATools\BehatExtension\Context\Initializer\QAToolsInitializer + arguments: ["@qa_tools"] + tags: + - { name: context.initializer }