簡體   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