繁体   English   中英

如何为Vaadin应用程序的UI组件生成唯一的ID?

[英]How to generate unique IDs for UI components of Vaadin applications?

通常,Vaadin应用程序为该应用程序的每个用户界面组件设置一个顺序ID。 不幸的是,这些ID对于自动测试而言不是很有用,因为它们是动态生成的,并且可能会在运行时(每个会话或添加新组件等时)发生变化。

对于测试自动化,每个组件(至少对于每个应用程序)需要一个唯一的静态ID。

A)可以利用Vaadin的setId()方法[1]来生成测试自动化友好的组件ID吗?

B)Vaadin的addStyleName()setStyleName()是否可以通过生成自定义CSS样式(以后可以作为ID“滥用”)来使用?

[3]中讨论的一些设计思想:

  • 将ID创建与ID分配分开
  • 使用命名策略创建ID
  • 在组件连接时分配ID

[1] https://vaadin.com/api/7.7.3/com/vaadin/ui/Component.html#setId-java.lang.String-

[2] https://vaadin.com/api/7.7.3/com/vaadin/ui/Component.html#setStyleName-java.lang.String-

[3] https://vaadin.com/forum#!/thread/278068

A)可以利用Vaadin的setId()方法[1]来生成测试自动化友好的组件ID吗?

是的,它替换了已弃用的setDebugId() 从其javadoc:

从接口com.vaadin.ui.Component复制的说明

为在客户端中用于测试目的的组件添加唯一的ID。 保持标识符唯一是程序员的责任。

我们没有将它与任何命名策略自动化“框架”一起使用 ,这已在您的第3个链接中进行了讨论。 我们根据内部协议手动设置组件ID。 请注意,并非所有组件都可以分配ID,例如菜单项


B)Vaadin的addStyleName()或setStyleName()是否可以通过生成自定义CSS样式(以后可以作为ID“滥用”)来使用?

您可以,但与A)大致相同。 然后,您可以使用findElement(By.className("some-class"))找到元素;

公共静态按className(@NotNull字符串className)

根据“ class”属性的值查找元素。 如果一个元素有很多类,那么它将与它们中的每一个匹配。 例如,如果值是“ one two onone”,则以下“ className”将匹配:“ one”和“ two”


另一种选择是使用xpath,例如findElement(By.xpath("//*[contains(@class, 'column-hiding-toggle')]/span/div[text()='Name']"))

尽管功能非常强大且灵活(如果我不误解By.idBy.className都是在By.id By.className来实现的),但其缺点是,如果用户界面的结构频繁更改,它可能会成为高维护性的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM