Java 如何使用TestNG+;在每次并行测试中创建新文件;硒网格?

Java 如何使用TestNG+;在每次并行测试中创建新文件;硒网格?,java,selenium,selenium-webdriver,testng,selenium-grid,Java,Selenium,Selenium Webdriver,Testng,Selenium Grid,我正在测试一个类似于Paint的GWT Web应用程序。在这里,我正在处理一个测试用例,我必须使用Selenium网格在不同的机器上测试它。除此之外,我正在两个浏览器上测试这个测试用例,方法是使用TestNG并行执行它们。现在,我在这个测试用例中面临的问题是,我必须拍摄屏幕截图,然后将其本地保存在我在当前工作目录中创建的文件夹中。但是第二个浏览器在测试期间拍摄的屏幕截图更新了第一个浏览器拍摄的屏幕截图,因为我只有一个类(要测试)用于两个浏览器 package testNgPackage; p

我正在测试一个类似于Paint的GWT Web应用程序。在这里,我正在处理一个测试用例,我必须使用Selenium网格在不同的机器上测试它。除此之外,我正在两个浏览器上测试这个测试用例,方法是使用TestNG并行执行它们。现在,我在这个测试用例中面临的问题是,我必须拍摄屏幕截图,然后将其本地保存在我在当前工作目录中创建的文件夹中。但是第二个浏览器在测试期间拍摄的屏幕截图更新了第一个浏览器拍摄的屏幕截图,因为我只有一个类(要测试)用于两个浏览器

package testNgPackage;

 public class Browser {
    //ThreadLocal will provide thread-safe tests
    protected ThreadLocal<RemoteWebDriver> threadLocal = null;
    @BeforeTest
    @Parameters("browser")
    public void setup(String browser) throws MalformedURLException{
        String nodeMachine = "http://xxx.xxx.xxx.xxx:5555/wd/hub"; //Providing the IP address of Node
        if(browser.equalsIgnoreCase("chrome")) {

            System.setProperty("webdriver.chrome.driver", ".src/Drivers/chromedriver.exe");
            DesiredCapabilities capability = null;
            capability = DesiredCapabilities.chrome();
            capability.setPlatform(Platform.VISTA);
            capability.setBrowserName("chrome");
            threadLocal = new ThreadLocal<RemoteWebDriver>();
            threadLocal.set(new RemoteWebDriver(new URL(nodeMachine), capability));
        }
        else if(browser.equalsIgnoreCase("firefox")) {

            System.setProperty("webdriver.gecko.driver", ".src/Drivers/geckodriver.exe");
            DesiredCapabilities capability = null;
            capability = DesiredCapabilities.firefox();
            capability.setPlatform(Platform.VISTA);
            capability.setBrowserName("firefox");
            threadLocal = new ThreadLocal<RemoteWebDriver>();
            threadLocal.set(new RemoteWebDriver(new URL(nodeMachine), capability));
        }

    }

    public WebDriver getDriver() {
        return threadLocal.get();
    }


    @AfterTest
    public void closeBrowser(){
        getDriver().close();
    }

}
我想要的是,我将能够采取截图,并保存在我的本地目录不同的名称他们。我在互联网上搜索了很多,但没有一种方法适合我,因此,我对如何做到这一点感到困惑

同时,这是我的代码

首先,有一个Browser类,我在其中给出了节点地址以及浏览器的功能

package testNgPackage;

 public class Browser {
    //ThreadLocal will provide thread-safe tests
    protected ThreadLocal<RemoteWebDriver> threadLocal = null;
    @BeforeTest
    @Parameters("browser")
    public void setup(String browser) throws MalformedURLException{
        String nodeMachine = "http://xxx.xxx.xxx.xxx:5555/wd/hub"; //Providing the IP address of Node
        if(browser.equalsIgnoreCase("chrome")) {

            System.setProperty("webdriver.chrome.driver", ".src/Drivers/chromedriver.exe");
            DesiredCapabilities capability = null;
            capability = DesiredCapabilities.chrome();
            capability.setPlatform(Platform.VISTA);
            capability.setBrowserName("chrome");
            threadLocal = new ThreadLocal<RemoteWebDriver>();
            threadLocal.set(new RemoteWebDriver(new URL(nodeMachine), capability));
        }
        else if(browser.equalsIgnoreCase("firefox")) {

            System.setProperty("webdriver.gecko.driver", ".src/Drivers/geckodriver.exe");
            DesiredCapabilities capability = null;
            capability = DesiredCapabilities.firefox();
            capability.setPlatform(Platform.VISTA);
            capability.setBrowserName("firefox");
            threadLocal = new ThreadLocal<RemoteWebDriver>();
            threadLocal.set(new RemoteWebDriver(new URL(nodeMachine), capability));
        }

    }

    public WebDriver getDriver() {
        return threadLocal.get();
    }


    @AfterTest
    public void closeBrowser(){
        getDriver().close();
    }

}
这是testng.xml文件,我在其中指定了要与参数一起运行的测试名称

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
 <suite name="Parallel test suite" parallel="tests" thread-count="2">
    <test name="FirefoxTest">
       <parameter name="browser" value="Firefox" />
       <classes>
         <class name="testNgPackage.TestNGClass"/>
       </classes>
    </test>
    <test name="ChromeTest">
       <parameter name="browser" value="Chrome" />
       <classes>
         <class name="testNgPackage.TestNGClass"/>
       </classes>
    </test>
</suite>


因为我是TestNG的初学者,所以我不知道如何解决我的问题。请提供帮助。

以不同的名称保存实际图像文件。您可以使用会话id或浏览器名称存储,如下所示

方法1: 只需替换以下代码

File fileActual = new File("./src/Images/actualDrawing.png");

方法2: 或替换为

Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
String browserName = cap.getBrowserName().toLowerCase();
File fileActual = new File("./src/Images/actualDrawing"+browserName+".png");
这可能对你有帮助

Capabilities cap = ((RemoteWebDriver) driver).getCapabilities();
String browserName = cap.getBrowserName().toLowerCase();
File fileActual = new File("./src/Images/actualDrawing"+browserName+".png");