簡體   English   中英

獲取不同類中的ThreadLocal變量 - Java - Selenium WebDriver

[英]Get ThreadLocal Variable In Different Classes - Java - Selenium WebDriver

如何使用在其他類中設置的ThreadLocal值?

例如,我在A類中設置了這些變量:

ThreadLocal<String> username = new ThreadLocal<String>();
username.set("user");

ThreadLocal<String> password = new ThreadLocal<String>();
password.set("pass");

我知道如何通過以下方式從同一個類中“獲取”它們:

String myUsername = username.get();
String myPassword = password.get();

但我找不到任何關於如何在B級中使用/獲取它們的內容?

基本的最終目標是我試圖將我的Selenium WebDriver測試轉換為並行運行。 這些文本值將輸入一個類(A),但后來我有另一個類(B),其中包含需要知道的“方法”(檢查數據庫條目,驗證屏幕數據等)在類(A)中輸入的數據。

我成功為非ThreadLocal變量執行此操作的方式如下所示:

在A類中設置值:

@Test (priority = 1)
public void enterData() {

    String environment = "QA";

    // Pass environment to stored variables
    StoredVariables newEnv = new StoredVariables();
    newEnv.setEnv(environment);

    driver.enterData;

}

將其存儲在B類(StoredVariables)中:

public class StoredVariables {

    private static String environment = "";

    public StoredVariables() {

    }

    public static String getEnv() {return environment;}
    public void setEnv(String s) {environment = s;}

}

從C類訪問它:

@Test (priority = 1)
public void verifyData() {

    String environment = StoredVariables.getEnv();

}

首先,我不是TestNG的粉絲。 如果您將Surefire配置為並行運行它們或者使用Parallel runner,則JUnit也可以進行並行運行測試。 考慮可能改為JUnit。

如果你堅持使用selenium,那么你可以創建一個ITestListener實現。 這個類可以有一個靜態的ThreadLocal。 這應該存儲測試使用的WebDriver。 您創建一個靜態方法,它返回測試類的ThreadLocal值。 在onTestStart方法中你可以負責啟動瀏覽器,在onTestSuccess中你可以停止瀏覽器,在onTestFailure你可以截取屏幕,保存HTML和日志,並停止瀏覽器。

還要注意,使用PageObject模式。

ThreadLocal<T>視為Map<Thread,T> 它不是一種在類之間共享值的方法,而是一種在每個線程中維護不同值的方法。

傳遞此變量的方式與任何其他變量完全相同。 通常通過將其返回到某處並/或將其存儲為字段。

暫無
暫無

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

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