UI自动化-我的UI上的元素有ember id,它会随着新UI元素的添加而频繁更改.如何使用id进行自动化



下拉元素的HTML示例:

<div aria-owns="ember-basic-dropdown-content-ember1234" tabindex="0" data-ebd-id="ember1234-trigger" role="button" id="ember1235" class="ember-power-select-trigger ember-basic-dropdown-trigger ember-view">  <!---->
<span class="ember-power-select-status-icon"></span>
</div>

xpath和CSS选择器也包含相同的成员id。xpath://*[@id="ember1235"]css选择器:#ember1235

当UI发生更改时,ember id将从id="ember1235"更改为id="ember2265"。

我正在使用id来定位元素。但每次它更改时,我都需要修改代码。我可以为EmberJSUI元素使用其他属性吗?

你的问题有很多要讨论的,但希望我们能给你一个好的答案@PriyaK

首先要提到的是,EmberID可能不是在DOM中选择元素的最佳方法。正如你已经提到的,它们可能会随着时间的推移而变化,而且在硒测试中并没有给你一个很好的语义选择,所以回过头来看可能有点断章取义。

您可以尝试的一件事是将一个类传递给ember power select组件(提供您在示例中使用的HTML的组件(,并使用它来选择元素,比如:

<PowerSelect
@class="my-fancy-class"
as |name|
>
{{name}}
</PowerSelect>

然后,您应该能够使用CSS选择器.my-fancy-class span来选择所选值(因为组件在一个跨度中输出所选值(

我们只是在一个示例应用程序中尝试了一下,但实际上不起作用🤔不要害怕,你也可以做这样的事情,它应该和以前一样使用选择器:

<div class="my-fancy-class">
<PowerSelect as |name|>
{{name}}
</PowerSelect>
</div>

这很好,但在测试中使用类作为选择器也存在一些问题。一个可能出现的问题的例子是,如果您进行了样式重构并更改或删除了元素上的一些类,那么您的测试可能会突然停止工作。Ember社区中流行的一种技术是在DOM节点上使用data-test-属性,如下所示:

<div data-test-my-fancy-select>
<PowerSelect
@class="my-fancy-class"
as |name|
>
{{name}}
</PowerSelect>
</div>

然后可以由以下选择器访问:CCD_ 3。这是伟大的原因有几个!首先,它将应用程序和测试的实现与样式分离,并避免了我上面描述的问题。这种方法的第二个好处是,使用@Gokul在评论中建议的ember测试选择器包,您可以在开发和测试环境中使用这些data-test-选择器,但它们将被自动从生产构建中删除。这对于在生产中保持DOM的清洁非常好,但根据应用程序的大小,也可以为聚合模板节省合理的大小。

我知道你说你在测试中使用了硒,但值得一提的是,如果你使用内置的Ember测试系统,你将能够使用插件可能为你提供的一些测试助手。ember power select是提供特定测试助手的插件之一,您可以在其文档中阅读更多信息:https://ember-power-select.com/docs/test-helpers

我希望这能回答你的任何问题!


这个问题是作为"我可以提问吗"第三季第一集的一部分回答的。如果你想看到我们完整地讨论这个答案,你可以在这里查看视频:https://www.youtube.com/watch?v=1DAJXUucnQU

最新更新