下拉元素的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