![](/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.