簡體   English   中英

存儲定位器的最佳方式

[英]Best way to store locators

我正在關注 Selenium 自動化的 object 設計模式頁面,我猜很多人將定位器存儲在.properties文件中並在代碼中訪問它們。 將定位器放在不同的地方似乎很棒。

因為,我還沒有為 Selenium 自動化從事任何大型項目,我想知道以下想法,以便避免將來可能出現的問題:

  1. 將定位器存儲在屬性文件中是否有助於大型項目(測試用例超過 1000 個左右)?

    a) 如果在大型項目中沒有幫助,那么我們不將定位器存儲在屬性文件中的困難是什么?

    b) 如果有幫助,如果采取了哪些預防措施使工作更容易?

  2. 與屬性文件相比,將定位器存儲在頁面 class 本身是最好的方法嗎?

我認為將文件存儲在頁面類本身中。 從屬性文件加載會產生額外的開銷或解析大文件。 維護這樣的文件也會更加困難,即使有良好的工具支持,您也將被迫使用 CTRL + F 超出應有的水平。

即使在更概念化的層面上,它也感覺不對。 非常適合存儲在屬性文件中的是可配置參數,尤其是那些適合在運行時進行調整的參數。

定位器沒有這種性質。 如果您正在尋求的好處是在一個中心位置聲明,您應該使用專用的常量類,這將為您提供更好的重構選項。

我絕對同意@Master Slave。 selenium的主要目的是使UI測試更容易。 locators存儲在property文件中很麻煩,而且會產生額外的開銷,而且是重構的噩夢。 PageObject流行的主要原因之一是因為它能夠以非常直觀的方式映射元素

@FindBy(name="q")
private WebElement searchField;

@FindBy(name="btnG")
private WebElement searchButton;

它不僅更具可讀性,而且在重構和調試的情況下也更容易。 而且,當頁面出現問題或更改時,您可以更改已知位置,並且您知道它在哪里!

有兩種基本方式:

1) 使用 FindBy 注解

@FindBy(xpath = "//*[@class = 'stackoverflow']")
private WebElement question;

2)在方法結構中使用By/WebElement類

By stackoverflow = By.xpath("//*[@class = 'stackoverflow']");
WebElement stackoverflowElement = getDriver().findElement(stackoverflow);

我完全同意@Saifur 和@MasterSlave。

我同意具有一個運行環境的小項目。 假設我們讓項目在測試和生產等兩個環境中運行。 假設在 Test 中更改了定位器,那么如果您想更改在兩種情況下都能正常工作的代碼,您應該轉到分支。 如果定位器放置在屬性文件中,您只需更改該文件所屬的環境。

我不反對以任何格式存儲定位器——屬性、INI、XML 或 xls,只要每個文件都很小且易於管理。 我認為,當我們談論 1000 個或更多測試用例時,對於僅使用一次的全局變量 [如 URL、端口號、用戶名、密碼、電子郵件],應存儲在單獨的 global_variables 文件中。 每個頁面的定位器可以存儲在單獨的文件中。 如果為每一頁維護一個文件,則定位器是可管理的。 Pages 將只導入需要的文件。 顯然,這種方法會創建更多數量的屬性文件作為頁面數量。 這可以通過為相關模塊或功能頁面創建單個文件來改善。 無論如何,作為用戶,我們需要在較小但巨大的定位器文件或更多但較小的可管理定位器文件之間進行平衡。

我正在研究類似的策略,我需要確定哪種定位器策略是最好的。 存放定位器的最佳位置是什么。

對於代碼/屬性文件,我有以下缺點:

  • 更改單個定位器的值很耗時
  • 在代碼中有過時的定位器/元素
  • 使代碼龐大
  • 使用不同的定位器在 pre-prod 和 prod 環境中運行測試,會導致創建分支和重復代碼。

但是,我更傾向於將定位器存儲在單獨的數據庫中並通過儀表板啟用其使用。 我也覺得這對您的自動化框架的設置方式非常主觀。 對於具有 1000 多個測試的大型框架,將它們分開更有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM