【问题标题】:How to generate unique IDs for UI components of Vaadin applications?如何为 Vaadin 应用程序的 UI 组件生成唯一 ID?
【发布时间】:2017-02-21 06:50:54
【问题描述】:

通常,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

【问题讨论】:

    标签: java css selenium automated-tests vaadin


    【解决方案1】:

    A) Vaadin 的 setId() 方法 [1] 能否用于生成测试自动化友好的组件 ID?

    是的,它取代了已弃用的 setDebugId()。从它的javadoc:

    从接口复制的描述:com.vaadin.ui.Component

    为在客户端用于测试的组件添加一个唯一的 id 目的。保持标识符的唯一性是 程序员。

    我们没有将它与任何类型的命名策略自动化“框架”一起使用,正如您在第三个链接中所讨论的那样。我们根据内部协议手动设置组件 ID。请注意,并非所有组件都可以分配ID,例如menu items


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

    你可以,但它或多或少与 A) 相同。然后您可以使用findElement(By.className("some-class")) 查找元素;

    public static By className(@NotNull String className)

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


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

    虽然非常强大和灵活(如果我没记错的话 By.idBy.className 都是在底层使用 xpath 实现的),但它的缺点是它可能会变得高维护您的用户界面结构经常变化。

    【讨论】:

    • 感谢您的回答。我知道 xpath 并且已经广泛使用它。我的问题主要针对在 Vaadin 网站上可以完成的事情,即生成静态 ID 以使 xpath 和/或 css 选择器(Selenium)的使用更容易和更好地维护。原因正如您已经提到的,如果 UI 发生变化,即使使用智能 xpath,维护也可能成为问题。清晰的命名或 ID 策略将有两大优势:1.定义选择器会更容易和更快;2.定义的选择器会更健壮,因此需要更少的维护工作。
    • 目的一方面是为了让测试自动化开发和维护更加高效,另一方面是为了给开发者提供更可靠的测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2020-04-06
    • 2020-11-07
    • 1970-01-01
    相关资源
    最近更新 更多