我的项目正在运行Behat 2.4
,Mink 1.4
和Behat Page Object Extension
,此版本我的测试很好,100%通过。
但由于与Browserstack完全集成,现在我正在迁移到Behat 3
,Behat 2不支持BrowserStack标记,并且集成很差。
我已经更改了我的作曲家文件并更新了项目,但是当我运行测试时,它会在Page Object Extension
上返回一个例外。
To create pages you need to pass a factory with setPageObjectFactory() (RuntimeException)
查看Page Object Docs我看不到有关setPageObjectFatory的任何信息,这不是必需的。
在配置部分中,如果您创建自定义工厂或/和自定义类名称解析程序,则仅指定factory
。
我的作曲家包含所有依赖项
{
"require-dev" : {
"behat/behat" : "master-dev",
"behat/mink-goutte-driver" : "master-dev",
"behat/mink-browserkit-driver" : "master-dev",
"sensiolabs/behat-page-object-extension" : "master-dev",
"behat/mink-extension" : "master-dev",
"behat/mink-selenium2-driver" : "master-dev",
"behat/mink" : "master-dev"
}
}
我的behat.yml吼叫
default:
suites:
default:
contexts:
- FeatureContext
- ProductDetailsContext
- CartContext
extensions:
SensioLabs\Behat\PageObjectExtension:
namespaces:
page: [Features\Page]
element: [Features\Page\Element]
Behat\MinkExtension:
sessions:
my_session:
browser_stack:
username: my_username
access_key: my_password
capabilities:
browserName: "Chrome"
browserVersion: "35"
platform: "WIN8"
我的FeatureContext扩展了MinkContext
<?php
use Behat\MinkExtension\Context\MinkContext;
/**
* Behat context class.
*/
class FeatureContext extends MinkContext
{
}
ProductDetailsContext扩展了PageObjectContext
<?php
use SensioLabs\Behat\PageObjectExtension\Context\PageObjectContext;
/**
*
*
*/
class ProductDetailsContext extends PageObjectContext
{
/**
* @Given /^I am on product details "([^"]*)"$/
*
* @param string $url
*/
public function iAmOnProductDetails($url)
{
$this->getPage("ProductDetails")->open(array("productUrl" => $url));
}
/**
* @Given /^I am at a random product details$/
*/
public function iAmAtARandomProductDetails()
{
$catalog = $this->getPage("Catalog");
$catalog->open(array('category' => 'calcados-femininos'));
$catalog->openRandomProduct();
}
/**
* @When /^I select product size$/
*/
public function iSelectProductSize()
{
$this->getPage("ProductDetails")->selectProductSize();
}
/**
* @Then /^I add product to cart$/
*/
public function iAddProductToCart() {
$this->getPage("ProductDetails")->addProductToCart();
}
/**
* @Then /^I add product to wishlist$/
*/
public function iAddProductToWishlist()
{
$this->getPage("ProductDetails")->addProductToWishlist();
}
}
我不知道如何解决这个问题,我需要帮助。
答案 0 :(得分:2)
问题是因为在Extensions
内配置了suites
,将Extensions
放在suites
之外,然后就可以了。
default:
suites:
default:
contexts:
- FeatureContext
- ProductDetailsContext
- CartContext
extensions:
SensioLabs\Behat\PageObjectExtension:
namespaces:
page: [Features\Page]
element: [Features\Page\Element]
Behat\MinkExtension:
sessions:
my_session:
browser_stack:
username: my_username
access_key: my_password
capabilities:
browserName: "Chrome"
browserVersion: "35"
platform: "WIN8"
答案 1 :(得分:1)
这是一个很长的镜头,但是我们在这里......在之前的Behat版本中,您使用了单/根上下文,它必须具有扩展PageObjectContext
。它必须是初始化的唯一/第一个上下文,它也是初始化页面工厂和页面本身的正确上下文。现在您有多个上下文,合乎逻辑的步骤是确保它们都按the docs here中的说明实现SensioLabs\Behat\PageObjectExtension\Context\PageObjectAwareInterface
。
我也没有在扩展名下看到'SensioLabs \ Behat \ PageObjectExtension'条目。我不认为Behat会在没有列表的情况下初始化扩展(它不能随便猜测它必须加载,对吧?)。这可能是你应该改变的第一件事。基于the docs about configuration,并按照默认约定,一切都应该有效。
答案 2 :(得分:0)
尝试安装
composer require --dev --ignore-platform-reqs sensiolabs/behat-page-object-extension:^2.0
在作曲家中我添加了--ignore-platform-reqs,因为我使用php 7. *作为我的作品