当前位置: 首页 > 知识库问答 >
问题:

Behat3和Mink1.5的Page对象扩展引发异常

秦永望
2023-03-14

我有一个使用Behat2.4Mink1.4Behat Page Object Extension运行的项目,使用这个版本我的测试很好,100%通过。

但现在我要迁移到Behat3,因为它与Browserstack完全集成,Behat2不支持Browserstack标志,而且集成性很差。

我已经更改了composer文件并更新了project,但当我运行测试时,它在Page Object Extension上返回了一个异常。

To create pages you need to pass a factory with setPageObjectFactory() (RuntimeException)

查看页面对象文档,我没有看到任何关于setPageObjectFatory的内容,这是不需要的。在configuration部分中,仅在创建自定义工厂或/和自定义类名解析器时指定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"
    }
}
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"

My 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();
    }
}

我不知道怎样才能解决这个问题,我需要帮助。

共有1个答案

颛孙航
2023-03-14

问题是因为扩展是在套件内部配置的,所以将扩展放在套件外部就可以工作了。

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"
 类似资料:
  • 我是构建web服务的新手,我开始使用spring boot构建web服务。我创建了以下controller类 尝试运行我的web服务会导致它抛出以下异常: 但是,如果我移除“ScheduledThreadPoolExecutor”和构造函数,它运行良好。谁能解释一下扩展课程有什么问题吗? 注: 1)扩展类是在下面提到的文章中建议的,作为我最初问题的解决方案。最初,我的runnable在没有任何类型

  • 属性的简洁表示法 ES6允许直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。 var foo = 'bar'; var baz = {foo}; baz // {foo: "bar"} // 等同于 var baz = {foo: foo}; 上面代码表明,ES6允许在对象之中,只写属性名,不写属性值。这时,属性值等于属性名所代表的变量。下面是另一个例子。 function f(

  • 编组或取消编组对象 您可以将若干个对象合并到一个组中,把这些对象作为一个单元同时进行处理。这样,您就可以同时移动或变换若干个对象,且不会影响其属性或相对位置。例如,您可能想将徽标设计中的对象编成一组,以便将其作为一个单元进行移动和缩放。 编组对象被连续堆叠在图稿的同一图层上,位于组中最前端对象之后;因此,编组可能会更改对象的图层分布及其在给定图层上的堆叠顺序。如果您选择位于不同图层中的对象并将其编

  • 本文向大家介绍扩展WordPress Page Walker,包括了扩展WordPress Page Walker的使用技巧和注意事项,需要的朋友参考一下 我已经看过在以前的博客文章中打印WordPress页面的智能列表,但是我想重新访问此主题并使用WordPress的Walker类。Walker类是一个抽象类,它对从数据库中提取和呈现项目的层次结构列表所需的许多基本功能进行了分类。从本质上讲,它

  • 我正在做一个项目,该项目将有许多JavaFX应用程序,这些应用程序具有相似但又足够不同的功能,因此我创建了一个抽象基类来扩展Application以处理常见的功能并指示它们需要做什么,还创建了一系列具体的类来扩展这些功能。然而,当我试图跑的时候,我得到 应用程序构造函数java.lang.Reflect.InvocationTargetException位于java.base/jdk.intern

  • 本文向大家介绍详解JS中Array对象扩展与String对象扩展,包括了详解JS中Array对象扩展与String对象扩展的使用技巧和注意事项,需要的朋友参考一下 废话不多说了,直接给大家上array对象扩展代码了,具体代码如下所示: 下面是string对象扩展代码如下所示: