![](/img/trans.png)
[英]Where do I get the IWait and IWebDriver classes for 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.