繁体   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