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

Codeception注入使用页面对象失败

麻昌翰
2023-03-14

我不熟悉Codeception,但在注入页面对象时遇到了一个问题。当我向页面对象添加以下构造逻辑时,就会出现问题。

public function __construct(\AcceptanceTester $I) {
    $this->tester = $I;
}

... 我从以下登录页面对象示例中获得:http://codeception.com/docs/06-ReusingTestCode#PageObjects

我得到的错误是:

[Codeception\Exception\InjectionException]未能在“MyTest”实例中注入依赖项。无法创建“页面\登录”的实例。无法创建“AcceptanceTester”的实例。未能创建“Codeception\Scenario”的实例。无法解析依赖项“Codeception\TestCase”。

这就是我如何在我的Cest中注入页面。

protected function _inject(\Page\Login $login) {
  $this->login_page = $login;
}

如果删除_构造代码,错误就会消失。这是Codeception中的错误还是我做错了什么?

这是我找到的工作。。。

use \AcceptanceTester;
use Page\Login as LoginPage;

class MyCest {
    protected $login_page;
    public function _before(AcceptanceTester $I) {
      $this->login_page = new LoginPage($I);
    }
}

共有1个答案

柯景龙
2023-03-14

这是预期的行为。

您的LoginPage构造函数不应该在DI期间有任何要实例化的参数,所以您的解决方法是使用AcceptanceTester实例初始化LoginPage实例的正确方法。

当您将AcceptanceTester指定为LoginPage的ctor arg时,Codeception的DI机制将尝试按以下方式递归解决依赖关系:

LoginPage(AcceptanceTester) -> AcceptanceTester(Scenario) -> Scenario(TestCase) -> TestCase

但是TestCase是抽象类,因此不能实例化。

 类似资料:
  • 你能帮我在页面对象模式中进行类(页面)注释吗?例如:我在上部菜单和页脚中有“联系人”WebElement。使用相同的定位器。我知道,我可以用一些注释和UpperMenu.class注释Footer.class,我也可以在其中放置整个页面的选择器。测试将首先检查页面选择器,然后检查元素选择器。就像:“footer_page_selector”“联系人”=“footer_page_contacts”

  • 问题内容: 我真的很喜欢硒2按照惯例如何促使您使用PageObjects作为POJO,然后简单地使用PageFactory实例化此类中的字段。 我发现的限制是,我们在许多不同的页面上重用了许多元素。最大的问题是,这些重用的组件在不同页面上显示时,其ID /名称不相同;但是我们将为每个测试运行的测试是相同的。 例如,我们在许多地方收集日期。因此,此示例页面对象可能是(删除了“月,日”字段): 然后,

  • 4.3、4.4节介绍了如何将C++对象导出到JavaScript环境,本节将介绍其逆操作,既:将JavaScript对象注入到C环境。 4.5.1 创建JavaScript对象/ID表 无论从内存模型的角度,还是从运行模型的角度,C原生代码都无法直接访问JavaScript中的对象。为此,我们需要提供一种途径,让C环境可以识别不同的JavaScript对象,最容易想到的,就是使用对象/ID表,该方

  • 问题内容: 我是JAX-RS的新手,我试图了解注释的工作方式。 在javadoc中有六个等级的列表()。但是,我在网络上找到将this注释与其他类型一起使用的代码,例如: 是否有可以与此注释一起使用的受支持类型的列表?在执行标准之间,此列表是否会更改? 我目前正在试验Jersey,我担心自己写的代码无法移植到其他JAX-RS实现中。 问题答案: 铆接的JAX-RS 规范定义了你可以通过注入的所有标

  • 我是 JAX-RS 的新手,我正在尝试了解注释应该如何工作。 在javadoc中有一个包含六个类的列表(< code >应用程序、< code>UriInfo、< code >请求、< code>HttpHeaders、< code >安全上下文、< code >提供者)。但是,我在网上找到了将this批注用于其他类型的代码,例如: 是否有可用于此批注的支持类型列表?该列表在标准实施期间是否发生变

  • 本章是一个针对页面对象设计模式的教程引导。 一个页面对象表示在你测试的WEB应用程序的用户界面上的区域。 使用页面对象模式的好处: 创建可复用的代码以便于在多个测试用例间共享 减少重复的代码量 如果用户界面变化,只需要修改一处 6.1. 测试用例 下面是一个在python.org网站搜索一个词并保证一些结果可以找到的测试用例。 import unittest from selenium impor