2013-02-21 97 views
1

我使用Selenium网络驱动程序+ TestNG并行运行我的硒测试。我用三个类无法使用硒网格从虚拟创建的testng.xml并行运行硒测试

一级(主类):

从这节课我要去开始测试。我执行的起点。

public class MainClass { 

public WebDriver driver = null; 

public void gid() { 

    try { 
     CreateTestngXml.gridHubLaunching(); 
     Thread.sleep(10000); 
    } catch (IOException | InterruptedException e) { 
     e.printStackTrace(); 
    } 

    CreateTestngXml.grid("firefox", "chrome"); 
    driver.close(); 
} 

public static void main(String a[]) { 
    MainClass ts = new MainClass(); 
    try{ 
    ts.gid(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 
} 

类双(CreateTestngXml):

公共类CreateTestngXml {

/** 
* 
* @param Brow 
* @param Brows 
* @code = To create a TestNg XML suite file and run it. 
*/ 
public static void grid(String Brow, String Brows) { 

    XmlSuite suite = new XmlSuite(); 
    suite.setName("Compatability"); 
    suite.setVerbose(1); 
    suite.setPreserveOrder("true"); 
    suite.setThreadCount(4); 
    suite.setParallel("tests"); 
    suite.setTimeOut("5000"); 

    // Test 
    XmlTest test = new XmlTest(suite); 
    test.setName("Browser One"); 
    test.addParameter("Browser", Brow); 

    XmlTest testOne = new XmlTest(suite); 
    testOne.setName("Browser Two"); 
    testOne.addParameter("Browser", Brows); 

    List<XmlTest> tests = new ArrayList<XmlTest>(); 
    tests.add(test); 
    tests.add(testOne); 

    // Class 
    List<XmlClass> classes = new ArrayList<XmlClass>(); 
    classes.add(new XmlClass("Grid.CheckGridOne")); 
    test.setXmlClasses(classes); 
    testOne.setXmlClasses(classes); 

    suite.setTests(tests); 

    // Suite 
    List<XmlSuite> suites = new ArrayList<XmlSuite>(); 
    suites.add(suite); 
    TestNG tng = new TestNG(); 
    tng.setXmlSuites(suites); 
    try { 
     // Running the Suite file. 
     tng.run(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

/** 
* 
* @throws IOException 
* @throws InterruptedException 
* @code = To launch the Grid Hub and Nodes 
*/ 
public static void gridHubLaunching() throws IOException, 
     InterruptedException { 

    // Launching nodes for each browser. 
    String[] hub = new String[] { "C:\\Windows\\System32\\cmd.exe", "/c", 
      "Start", "Grid-BatchFiles\\hub.bat" }; 
    String[] firefox = new String[] { "C:\\Windows\\System32\\cmd.exe", 
      "/c", "Start", "Grid-BatchFiles\\firefox.bat" }; 
    String[] chrome = new String[] { "C:\\Windows\\System32\\cmd.exe", 
      "/c", "Start", "Grid-BatchFiles\\chrome.bat" }; 
    String[] ie = new String[] { "C:\\Windows\\System32\\cmd.exe", "/c", 
      "Start", "Grid-BatchFiles\\IE.bat" }; 
    Runtime.getRuntime().exec(hub); 
    Thread.sleep(3000); 
    Runtime.getRuntime().exec(firefox); 
    Runtime.getRuntime().exec(chrome); 
    Runtime.getRuntime().exec(ie); 
} 

    } 

gridHubLaunching()方法用于启动所述轮毂和相应的浏览器的节点。它在创建节点时没有问题。我通过使用http://localhost:4444/grid/console

类三(Grid.CheckGridOne)确保的创建:

public class CheckGridOne { 

MainClass ts = new MainClass(); 
WebDriver driver = ts.driver; 

DesiredCapabilities capability = null; 

/** 
* 
* @param Browser 
* @throws Exception 
* @code = To launch a Browser for Compatibility Testing purpose. 
*/ 

@Test 
@Parameters({ "Browser" }) 
public void browserLaunch(String Browser) throws Exception { 

    // Checking condition for a Firefox. 
    if (Browser.equalsIgnoreCase("firefox")) { 
     System.out.println("Firefox"); 

     capability = DesiredCapabilities.firefox(); 
     capability.setBrowserName("firefox"); 
     capability.setPlatform(org.openqa.selenium.Platform.WINDOWS); 

     URL url = new URL(`http://lo***st:4444/wd/hub`); 
     System.out.println("testing"); 
     driver = new RemoteWebDriver(url, capability); 

     System.out.println("test"); 
    } 

    // Checking condition for a iexplorer. 
    if (Browser.equalsIgnoreCase("iexplorer")) { 
     System.out.println("IE"); 

     System.setProperty(
       "webdriver.ie.driver", 
       "E:\\FW\\Test-2.28.0(Feb-18)\\IEDriverServer\\64-Bit\\IEDriverServer.exe"); 

     capability = DesiredCapabilities.internetExplorer(); 
     capability.setBrowserName("internet explorer"); 
     capability.setPlatform(org.openqa.selenium.Platform.ANY); 
     System.out.println("testing"); 
     driver = new RemoteWebDriver(new URL(
        `http://lo***st:4444/wd/hub`), capability); 
     System.out.println("test"); 
    } 

    // Checking condition for a chrome. 
    if (Browser.equalsIgnoreCase("chrome")) { 
     System.out.println("chrome"); 

    } 
} 
    } 

通过使用上述3类我试图并行运行硒测试。我的问题是它在第三节课到达driver = new RemoteWebDriver(url, capability);之前工作正常。一旦到达线路,它将终止TestNG suite file。我不知道我的代码有什么问题?

输出:

[TestNG] Running: 
    Command line suite 

Firefox 
IE 
testing 
testing 

=============================================== 
Compatability 
Total tests run: 0, Failures: 0, Skips: 0 
=============================================== 

test 
test 

输出显示总测试运行作为0。我不知道它为什么会这样。

Selenium服务器 - 2.28.0
TestNG的 - 6.1.1 & 6.8
IEDriverServer - 2.28.0

我知道这个问题有点大。我认为这是解释清楚的正确方法。任何帮助,将不胜感激。

+0

你确定这个零件正在工作吗? 'classes.add(new XmlClass(“Grid.CheckGridOne”));'即将测试类添加到testng xml中,是否可以发布您的输出testng xml – StaleElementException 2013-02-25 15:04:18

+0

是的。上面的工作正常。它可以调用类中的'@ Test'方法。 XML文件在运行时创建。所以,不可能从外部看到XML文件。如果你需要我可以发布它如何创建XML文件。 – Manigandan 2013-02-26 03:27:41

+0

我想你可以在/ test-output文件夹下看到创建的xml文件 – StaleElementException 2013-02-26 09:11:14

回答

0

DIT:你为什么要从第三堂课回到第一堂课?这看起来像一个循环。

只需在第三堂课中定义您的WebDriver即可。

public class CheckGridOne { 

@Test 
@Parameters({ "Browser" }) 
public void browserLaunch(String Browser) throws Exception { 

WebDriver driver = null; 

    // Checking condition for a Firefox. 
    if (Browser.equalsIgnoreCase("firefox")) { 
     System.out.println("Firefox"); 

     capability = DesiredCapabilities.firefox(); 
     capability.setBrowserName("firefox"); 
     capability.setPlatform(org.openqa.selenium.Platform.WINDOWS); 

     URL url = new URL(`http://lo***st:4444/wd/hub`); 
     System.out.println("testing"); 
     driver = new RemoteWebDriver(url, capability); 

     System.out.println("test"); 
    } 

    // Checking condition for a iexplorer. 
    if (Browser.equalsIgnoreCase("iexplorer")) { 
     System.out.println("IE"); 

     System.setProperty(
       "webdriver.ie.driver", 
       "E:\\EproNewFW\\SWIFTest-2.28.0(Feb-18)\\IEDriverServer\\64-Bit\\IEDriverServer.exe"); 

     capability = DesiredCapabilities.internetExplorer(); 
     capability.setBrowserName("internet explorer"); 
     capability.setPlatform(org.openqa.selenium.Platform.ANY); 
     System.out.println("testing"); 
     driver = new RemoteWebDriver(new URL(
        `http://lo***st:4444/wd/hub`), capability); 
     System.out.println("test"); 
    } 

    // Checking condition for a chrome. 
    if (Browser.equalsIgnoreCase("chrome")) { 
     System.out.println("chrome"); 

    } 
} 
    }