2017-06-26 2 views
0

Ich versuche, einen Stub für gleichzeitige Cross-Browser-Test-Framework mit TestNG zu arbeiten. Scheint aber ich nicht @Parameter von Elternklasse bekommen und haltenTestNG erben @Parameters von Elternklasse

Parameter 'browsername' is required by @Configuration on method setup but has not been marked @Optional or defined 
    at org.testng.internal.Parameters.createParameters(Parameters.java:155) 
    at org.testng.internal.Parameters.createParameters(Parameters.java:358) 
    at org.testng.internal.Parameters.createConfigurationParameters(Parameters.java:86) 
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:199) 
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:138) 
    at org.testng.internal.TestMethodWorker.invokeBeforeClassMethods(TestMethodWorker.java:175) 
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:107) 
    at org.testng.TestRunner.privateRun(TestRunner.java:767) 
    at org.testng.TestRunner.run(TestRunner.java:617) 
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:348) 
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:343) 
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:305) 
    at org.testng.SuiteRunner.run(SuiteRunner.java:254) 

TestNG.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="1265_Suite" parallel="tests" verbose="2" thread-count="2" preserve-order="true"> 
    <test name="92" parallel="false" preserve-order="true"> 
     <classes> 
      <class name="com.javacodegeeks.testng.maven.BaseTest"/> 
      <class name="com.javacodegeeks.testng.maven.ChildTest"/> 
      <parameter name="browsername" value="chrome"/> 
     </classes> 
    </test> 
    <test name="93" parallel="false" preserve-order="true"> 
     <classes> 
      <class name="com.javacodegeeks.testng.maven.BaseTest"/> 
      <class name="com.javacodegeeks.testng.maven.ChildTest"/> 
      <parameter name="browsername" value="firefox"/> 
     </classes> 
    </test> 
</suite> 

bekommen BaseTest

public class BaseTest extends Assert { 

    protected String browser; 

    @BeforeClass 
    @Parameters({"browsername"}) 
    public void setup(String browsername) { 
     System.err.println("Browser name in @BeforeClass is " + browsername); 
     this.browser = browsername; 
    } 
} 

ChildTest

public class ChildTest extends BaseTest { 

    @Test 
    public void test() { 
     System.out.println(browser); 
    } 
} 

ich nicht tat finde genug Informationen darauf, wie man das zum Laufen bringt. Wenn Sie Ideen haben, würde ich sie gerne hören.

bereits überprüft, aber nicht genug Informationen: TestNG Annotations in a Superclass

Antwort

0

Versuchen Sie es erneut mit <parameter> Knoten auf den <test> Knoten (und BaseTest sollte nutzlos sein):

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="1265_Suite" parallel="tests" verbose="2" thread-count="2" preserve-order="true"> 
    <test name="92" parallel="false" preserve-order="true"> 
     <parameter name="browsername" value="chrome"/> 
     <classes> 
      <!--class name="com.javacodegeeks.testng.maven.BaseTest"/--> 
      <class name="com.javacodegeeks.testng.maven.ChildTest"/> 
     </classes> 
    </test> 
    <test name="93" parallel="false" preserve-order="true"> 
     <parameter name="browsername" value="firefox"/> 
     <classes> 
      <!--class name="com.javacodegeeks.testng.maven.BaseTest"/--> 
      <class name="com.javacodegeeks.testng.maven.ChildTest"/> 
     </classes> 
    </test> 
</suite> 
+0

Die Hauptidee ist Vererbung zu verwenden (BaseTest) für alle Testsuiten. Wenn ich den BaseTest von hier entferne, ist das nicht sinnvoll. –

+0

Alle Testklassen werden BaseTest erweitern, oder? Also, TestNG wird es durch Introspektion erkennen. Aus diesem Grund hat es keine Wirkung, wenn Sie es in die Suite-Datei aufnehmen oder nicht. – juherr

+0

BTW, ist meine Lösung, die Ihr Parameterproblem repariert? – juherr

Verwandte Themen