2016-04-14 2 views
0

Ich möchte meinen Code auf zwei verschiedenen Maschinen ausführen (ab sofort habe ich meine lokale Maschine als Hub und 2 Knoten registriert), so während ich die Datei testng.xml laufe, bekomme ich unter Fehler.selenegrid2- @ Parameter Annotationsfehler

ich Störung erhalte, während testng.xml Datei ausgeführt wird, Anwendung thorws Fehler: - bitte meine testng.xml Datei und mein Code siehe unten angegeben: -

My testng.xml file is:- 

<?xml version="1.0" encoding="UTF-8"?> 
<suite name="Suite" thread-count="4" parallel="tests"> 

    <test name="PVR Test"> 
    <parameter name="remoteurl" value="http://localhost:5555/wd/hub" /> 
     <classes> 
      <class name="dd_testcases.login"> 
       <methods> 
        <include name="banner_check" /> 
       </methods> 
      </class> 
     </classes> 
    </test> <!-- Test --> 

    <test name="footersection"> 
    <parameter name="remoteurl" value="http://localhost:5556/wd/hub" /> 

     <classes> 
      <class name="dd_testcases.News_General_Footer"> 
       <methods> 
        <include name="News_General_Footer" /> 
       </methods> 
      </class> 
     </classes> 
    </test> 
    Test 
</suite> <!-- Suite --> 

and my code is :- 

    @BeforeSuite 

    @Parameters("remoteurl") 

    public void init(String remoteurl) throws IOException, InterruptedException{ 
     //BasicConfigurator.configure(); 
     dbcon=new sqldbconfig(); 
     logs=Logger.getLogger("PVR"); 
     config=new Properties(); 
     OR=new Properties(); 

     if (driver==null){ 

      InputStream is = getClass().getResourceAsStream("/config.properties"); 
      config.load(is); 
      //fis=new FileInputStream(config.getProperty("confpath")); 

      fis=new FileInputStream(System.getProperty("user.dir")+config.getProperty("ORpath")); 
      //fis=new FileInputStream(System.getProperty("user.dir")+"\\src\\dd_properties\\OR.properties"); 
      OR.load(fis); 

      //fis=new FileInputStream(config.getProperty("xlspath")); 
      excel=new Xls_Reader(System.getProperty("user.dir")+config.getProperty("xlspath")); 
      System.out.println("Browser:: "+config.getProperty("Browser")); 
      if (config.getProperty("Browser").equalsIgnoreCase("Mozilla")){ 
       cap=DesiredCapabilities.firefox(); 
       cap.setBrowserName("firefox"); 
       cap.setPlatform(Platform.ANY); 
      } 
      else if(config.getProperty("Browser").equalsIgnoreCase("chrome")){ 
       cap=DesiredCapabilities.chrome(); 
       cap.setBrowserName("chrome"); 
       cap.setPlatform(Platform.ANY); 
      } 
     driver=new RemoteWebDriver(new URL(remoteurl),cap); 
      driver.get(config.getProperty("testurl")); 

and when i run via testng.xml file code throws error:- 

org.testng.TestNGException: 
Parameter 'remoteurl' is required by @Configuration on method init but has not been marked @Optional or defined 
in C:\Users\HT1\workspace\PVRGrid-A\testng.xml 
    at org.testng.internal.Parameters.createParameters(Parameters.java:148) 
    at org.testng.internal.Parameters.createParameters(Parameters.java:361) 
    at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:84) 
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:197) 
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:296) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:259) 
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) 
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86) 
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1185) 
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1110) 
    at org.testng.TestNG.run(TestNG.java:1018) 
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111) 
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204) 
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175) 

Please help me.....what i am doing wrong.... 
+0

eigentlich habe ich einen Rahmen und Rest des Codes ist in anderen Klassen-Dateien (die ich hier nicht erwähnt habe), weil ich Fehler in @ BeforeSuite Annotation bekommen –

Antwort

0

Sie definiert haben „remoteUrl“ als Parameter auf Testlevel in TestNG xml, während Sie im Code auf Suite-Ebene in init() verweisen. Ändern Sie in TestNG XML den Parameter auf Suite-Ebene, indem Sie nach dem Suite-Tag deklarieren, und es sollte funktionieren. Das Deklarieren der URL auf Suite-Ebene ist sinnvoll, da alle Tests mit derselben Serversitzung ausgeführt werden.

+0

Danke !! Laut Ihrem Kommentar habe ich Änderungen vorgenommen und Parameter in Suite lvl übergeben, aber das hilft mir nicht weiter. Nun werden die beiden Browser in zwei verschiedenen Maschinen geöffnet, aber die Anwendung wird nur in einer Maschine und nicht in der zweiten Maschine ausgeführt. –

+0

Vielleicht etwas mit der lokalen Registrierung als Hub und Knoten zu tun. Ich schlage vor, Sie schließen dieses Problem und öffnen ein anderes für Selen Grid bezogen. Ich habe nicht intensiv an Grid gearbeitet, um eine Lösung vorzuschlagen. – Akbar

0

Warum erstellen Sie den Treiber in @beforesuite? Es sollte in @beforeclass erstellt werden. Es hat nur ein Treiberobjekt .. Ich bin mir auch nicht sicher, wie Ihre Methode auf dieses Treiberobjekt zugreift, da Sie die tatsächliche Methode nicht gepostet haben. Aber ich denke, das Problem ist, dass Ihre Methoden das gleiche Treiberobjekt verwenden wie die vorhergehende Suite nur einmal ausgeführt wird.

+0

Genau haben Sie mein Problem ... das ist das Problem, ich habe das gleiche Objekt der "RemoteWebDriver" -Klasse erstellt. Deshalb läuft meine @BeforeSuite mit einer Remote-URL. Also lassen Sie mich bitte wissen, wenn ich das gleiche Skript auf zwei verschiedenen Remote-URLs (zwei verschiedene Maschinen/Knoten) ausführen möchte, dann muss ich zwei verschiedene Objekte der "RemoteWebDriver" -Klasse erstellen oder gibt es eine Möglichkeit, den gesamten Code auf zwei auszuführen verschiedene Maschinen mit demselben RemoteWebDriver-Objekt? Bitte helfen !!! –

+0

Versuchen Sie, das Treiberobjekt in Ihrer Testklasse zu erstellen. Da du den Code nicht gepostet hast, kann ich dir nicht helfen. – Shamik

+0

Versuchen Sie, das Treiberobjekt in Ihrer Testklasse zu erstellen. Da du den Code nicht gepostet hast, kann ich dir nicht helfen. Ihr Treiberobjekt sollte eine Instanzvariable Ihrer Testklasse sein und sollte nicht geteilt werden. Sie sollten den Treiber ojject bekommen, indem Sie Ihr Raster treffen. Das Restgitter wird passen. – Shamik

Verwandte Themen