1

Я использовал веб-драйвер Selenium + TestNG для параллельной работы тестов на селен. Я использовал три классаНевозможно запустить тест селена параллельно с фактически созданным testng.xml с использованием селеновой сетки

Class One (Main Class):

Из этого класса я собираюсь начать тестирование. Начальная точка моего исполнения.

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"); 

    } 
} 
    } 

Используя выше три класса я попытался запустить тесты селена параллельно. Моя проблема заключается в том, что он отлично работает, прежде чем он достигнет 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. Я не знаю, почему это так.

Селен Сервер - 2.28.0
TestNG - 6.1.1 & 6,8
IEDriverServer - 2.28.0

Я знаю, что этот вопрос является немного большим. Я думал, что это правильный способ объяснить. Любая помощь будет оценена по достоинству.

+0

Вы уверены, что эта часть работает? 'classes.add (новый XmlClass (« Grid.CheckGridOne »)), добавив тестовые классы в testng xml, можно отправить свой тестовый результат xml – StaleElementException

+0

Да. Вышеупомянутый работает нормально. Он способен вызвать метод '@ Test' внутри класса. XML-файл создается во время выполнения. Таким образом, внешний вид XML-файла не представляется возможным. Если вам нужно, я могу опубликовать, как он может создавать XML-файл. – Manigandan

+0

Я думаю, вы можете увидеть созданный файл xml под папкой/test-output – StaleElementException

ответ

0

€ DIT: Почему вы звоните из 3-го класса снова в первый класс? Это похоже на цикл.

Просто определите свой WebDriver в своем 3-м классе.

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"); 

    } 
} 
    } 
Смежные вопросы