如何杀死Selenium Grid节点中的线程

我在Selenium Grid中运行代码。 我有一个名为TestBase的类,如下所示,我想在单击按钮时退出所有线程,但是当我单击按钮时会抛出NullpointerException。

public class TestBase { protected ThreadLocal threadDriver = null; Button b; Frame f; static boolean flag = true; @BeforeMethod public void setUp() throws MalformedURLException { if(flag) { JFrame calcFrame = new JFrame(); flag = false; calcFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); final JButton button1 = new JButton("1"); button1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent ae) {closure();} }); calcFrame.add(button1); calcFrame.setVisible(true); } threadDriver = new ThreadLocal(); DesiredCapabilities dc = new DesiredCapabilities(); FirefoxProfile fp = new FirefoxProfile(); dc.setCapability(FirefoxDriver.PROFILE, fp); dc.setBrowserName(DesiredCapabilities.firefox().getBrowserName()); threadDriver.set(new RemoteWebDriver(new URL("http://192.168.3.7:4444/wd/hub"), dc)); } public WebDriver getDriver() { return threadDriver.get(); } public void closure() { getDriver().quit(); } @AfterMethod public void closeBrowser() { // log.info("In closeBrowser..."); getDriver().quit(); } } 

我想它无法找到它必须退出的线程。 请帮忙.. :)

就个人而言,我不会使用ThreadLocal。 我只会使用受保护的成员变量,将受保护的WebDriver作为TestBase类的成员。 然后,一旦您的会话在网格上启动,让您的测试记住会话ID,然后如果有错误,您可以通过发送命令退出驱动程序以及该线程的会话ID来终止Grid线程。 我基本上是一个JSON请求。 JSON有线协议有一个如下所示的delete命令:

 DELETE /session/:sessionId 

通过使用ThreadLocal,在我看来,你正在使用一些旨在处理本地线程的东西,并尝试将该概念应用于已经有自己的线程处理的远程服务。 我想我从不使用ThreadLocal,因为我的测试人员为我做了线程:TestNG。