通常,Vaadin应用程序为应用程序的每个用户界面组件设置顺序ID。遗憾的是,这些ID对于测试自动化而言并不是非常有用,因为它们是动态生成的,并且可能在运行时(每个会话或添加新组件等)时发生变化。
对于测试自动化,每个组件都需要(至少每个应用程序)唯一的静态ID。
A)Vaadin的setId()
方法[1]可以用来生成测试自动化友好的组件ID吗?
B)Vaadin的addStyleName()
或setStyleName()
可以通过生成自定义CSS样式来实现,后者可能被滥用"作为身份证?
[3]中讨论的一些设计思路:
[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-
答案 0 :(得分:0)
A)Vaadin的setId()方法[1]可以用来生成测试自动化友好的组件ID吗?
是的,它取代了已弃用的setDebugId()
。来自它的javadoc:
从界面复制的说明:com.vaadin.ui.Component
为客户端用于测试的组件添加唯一ID 目的。保持标识符的唯一性是责任 程序员。
我们没有将它与任何类型的命名策略自动化“框架”一起使用,正如您在第3个链接中所讨论的那样。我们根据内部协议手动设置组件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 one onone”,然后以下“className”将匹配: “一”和“两个”
另一种选择是使用xpath,例如findElement(By.xpath("//*[contains(@class, 'column-hiding-toggle')]/span/div[text()='Name']"))
。
虽然非常强大且灵活(如果我没有误解By.id
& By.className
是通过引擎盖下的xpath实现的,那么它的缺点是它可以变得高维护< / em>如果用户界面的结构经常变化。