InvalidArgumentException:找不到带有 [Edit] 的正文、名称或 ID 属性的链接

Posted

技术标签:

【中文标题】InvalidArgumentException:找不到带有 [Edit] 的正文、名称或 ID 属性的链接【英文标题】:InvalidArgumentException: Could not find a link with a body, name, or ID attribute of [Edit] 【发布时间】:2017-04-19 20:32:35 【问题描述】:

我正在测试一个带有一个按钮的页面,该按钮打开一个模式来编辑记录。

 $this->visit('/admin/dashboard/units')
            ->see($site->name . ' ' . '~' . ' ' . 'Units')
            ->see($unit_type->name)
            ->see($unit->unit_type_id)
            ->see($unit->status)
            ->click('Edit')

在我的刀片文件中,我有:

<a class="button warning" data-open="editUnit $unit->id ">Edit</a>

还是不行

但我收到此错误:

有 1 个错误:

1) UnitsTest::testEditUnit InvalidArgumentException: 找不到 带有 [Edit] 的正文、名称或 ID 属性的链接。

更新

我也尝试过像这样传递一个 id

<a id="Edit" class="button warning" data-open="editUnit $unit->id ">Edit</a>

【问题讨论】:

您可以尝试给按钮一个唯一的 id,然后按它的 id 按下它。不知道为什么它找不到按钮 - 它实际上似乎是有效的。 很可能没有找到对象,因为它不是在测试期间创建的。尝试给它一个 id 并搜索它。另一种方法是转储输出并搜索实际内容。 我已经将 id 传递给 a 标签,但仍然没有工作 @melanholly 它创建了对象,因为-&gt;see($site-&gt;name) 工作正常 &lt;a id="Edit" id 应该是唯一的。如果您有多个其中之一,则框架可能无法找到它。这来自 `Symfony\Component\DomCrawler\ 【参考方案1】:

问题是我正在单独测试编辑表单,但它是当前页面的一部分,处于模态。所以我像这样将测试与创建测试结合起来。

$this->visit('/admin/dashboard/units')
            ->see($site->name . ' ' . '~' . ' ' . 'Units')
            ->seePageIs('/admin/dashboard/units')
            ->type('Unit 1', 'name')
            ->select($unit_type->id, 'unit_type_id')
            ->press('Add Unit')
            ->see('Unit saved successfully')
            ->see('Unit 1')
            ->seeInDatabase('units', [
                'name' => 'Unit 1',
                'unit_type_id' => $unit_type->id
            ])
            ->click('Edit')
            ->type('Edited Unit', 'name')
            ->select($unit_type->id, 'unit_type_id')
            ->press('Save')
            ->see('Unit Updated Successfully')
            ->see('Edited Unit')
            ->seeInDatabase('units', [
                'name' => 'Edited Unit',
                'unit_type_id' => $unit_type->id
            ])
            ->click('Delete')
            ->press('Yes')
            ->see('Unit Deleted Successfully')
            ->dontSee('Edited Unit')
            ->dontSeeInDatabase('units', [
                'name' => 'Edited Unit',
                'unit_type_id' => $unit_type->id
            ]);

另外值得注意的是,从 laravel 5.4 开始,visitseeclick 等测试方法已被删除。看到这个link 和亚当有很好的升级tutorials

【讨论】:

以上是关于InvalidArgumentException:找不到带有 [Edit] 的正文、名称或 ID 属性的链接的主要内容,如果未能解决你的问题,请参考以下文章

PHPUnit + Selenium`InvalidArgumentException:找不到元素`

出现错误:InvalidArgumentException:无法找到名称为 [default] [App\User] 的工厂

(InvalidArgumentException(code: 0): Disk [public] 没有配置驱动程序 Voyager

Laravel:错误 InvalidArgumentException

InvalidArgumentException,“未找到视图”,在 Lumen 5.2.6 上

导入AppiumLibrary报错: ImportError: cannot import name 'InvalidArgumentException