2017-07-18 2 views
0

Ich versuche, POM (PageFactory) basiert TestNG Rahmen zu machen, aber ich bin vor Problem WebDriver Instanz 2. Testcase-Datei mit geben ..So führen Sie mehrere PageFactory-Seiten einzeln mit TestNG.XML aus?

Dies ist mein Test-Base (Browser und log4j initialisieren)

public class TestBase { 
    public static WebDriver driver; 
    public static FileInputStream fip; 
    public static Properties prop; 
    //public static Logger APP_LOGS=null; 
    //public static SoftAssert st=null; 
    public static boolean TestFail=false; 
    public static int temp=0; 
    public static final Logger APP_LOGS=Logger.getLogger(TestBase.class.getName()); 

    public static WebDriver initialization() throws Throwable{ 
     fip=new FileInputStream("./Files/or.properties"); 
     prop=new Properties(); 
     prop.load(fip); 
     //APP_LOGS.debug("properties file is loaded"); 
     String browser=prop.getProperty("browsertype"); 
      //System.out.println("5"); 
     if(browser.equalsIgnoreCase("mozilla")){ 
      System.setProperty("webdriver.gecko.driver", "./drivers/geckodriver.exe"); 
      driver= new FirefoxDriver(); 
      //APP_LOGS.debug("Mozilla fire fox browser started"); 
     } 
     else if (browser.equalsIgnoreCase("ie")){ 
      System.setProperty("webdriver.ie.driver", "./drivers/IEDriverServer.exe"); 
      driver=new InternetExplorerDriver(); 
      //APP_LOGS.debug("InternetExplorer browser started"); 
     } else if(browser.equalsIgnoreCase("chrome")){ 
      System.setProperty("webdriver.chrome.driver", "./drivers/chromedriver.exe"); 
      driver=new ChromeDriver(); 
      //APP_LOGS.debug("Chrome browser started"); 
     } 
     driver.get(prop.getProperty("url")); 
     //driver.manage().window().maximize(); 
     String log4jConfPath = "log4j.properties"; 
     PropertyConfigurator.configure(log4jConfPath); 
     APP_LOGS.info("Opened "+prop.getProperty("browsertype")+" browser");    
     APP_LOGS.info("Navigated to Seleniumeasy.com/test"); 

     driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); 
     return driver; 

    } 

Above Code ich in meinem Test-PAGE..ie InputFormSubmitPage bin erstreckt (Unter)

public class InputFormSubmitPage extends TestBase{ 

    WebDriver driver; 

    public InputFormSubmitPage(WebDriver driver) { 
     this.driver=driver; 
     PageFactory.initElements(driver, this); 
    } 

    //INPUTFORM SUBMIT -- Objects Locators 

    @FindBy(how=How.XPATH, using="//*[@id='treemenu']/li/ul/li[1]/a") WebElement inputformlink;  
    @FindBy(how=How.XPATH, using="//*[@id='treemenu']/li/ul/li[1]/ul/li[5]/a") WebElement inputFormSubmit; 
    @FindBy(how=How.CSS, using="[name='first_name'][placeholder='First Name']") WebElement firstName; 
    @FindBy(how=How.CSS, using="[name='last_name'][placeholder='Last Name']") WebElement lastName; 
    @FindBy(how=How.CSS, using="[name='email'][placeholder='E-Mail Address']") WebElement eMail; 
    @FindBy(how=How.CSS, using="[name='phone'][data-bv-field='phone']") WebElement phoneNumber; 
    @FindBy(how=How.CSS, using="[name='address'][placeholder='Address']") WebElement address; 
    @FindBy(how=How.CSS, using="[name='city'][placeholder='city']") WebElement city; 
    @FindBy(how=How.CSS, using=".form-control.selectpicker") WebElement state; 
    @FindBy(how=How.CSS, using="[name='zip'].form-control") WebElement zipCode; 
    @FindBy(how=How.CSS, using="[name='comment'][placeholder='Project Description']") WebElement projDescription; 
    @FindBy(how=How.CSS, using=".btn.btn-default") WebElement sendButton; 
    //@FindBy(how=How.CSS, using="div[class$='has-error']>div>small[data-bv-result='INVALID']") WebElement allFieldsValidationErrorMessages_Invalid; 
    //@FindBy(how=How.CSS, using="div[class$='has-error']>div>small[data-bv-result='VALID']") WebElement allFieldsValidationErrorMessages_Valid; 

    @FindBy(css="div[class$='has-error']>div>small[data-bv-result='INVALID']") public List<WebElement> allFieldsValidationErrorMessages_Invalid; 

public void enterInputFormDetails() 
{ 
    inputformlink.click(); 
    inputFormSubmit.click(); 
    firstName.sendKeys("FirstName"); 
    lastName.sendKeys("LastName"); 
    eMail.sendKeys("[email protected]"); 
    phoneNumber.sendKeys("9008001242"); 
    address.sendKeys("1234, 1st street"); 
    city.sendKeys("City"); 

    //State Selector 
    Select oneState= new Select(state); 
    oneState.selectByIndex(3); 

    zipCode.sendKeys("12345"); 
    projDescription.sendKeys("This is Project Description"); 
    sendButton.click(); 

     APP_LOGS.info("*****************InputFormSubmit Button is clicked*****************"); 

    } 

Jetzt in meinem Testfall also InputFormSubmitPageTest i Initialisierung der Lage bin WebDriver ... Aber hier ist das Problem .. in meinem ne xt test case .. wenn ich die selbe Zeile passiere, zB WebDriver driver = TestBase.initialization(); Browser wird wieder initialisiert .. ich will das allerdings vermeiden .. Aber nicht sicher wie ich laufen soll Ich benutze TestNG.xml zum laufen die sequentielle Ausführung

public class InputFormSubmitPageTest { //My First TestCase 

    @Test 
    public void validatingFieldsData() throws Throwable 
    { 
     WebDriver driver=TestBase.initialization(); // this is where i am starting browser 

     InputFormSubmitPage formSubmit=PageFactory.initElements(driver, InputFormSubmitPage.class);  
     formSubmit.inputFormLaunch(); 
     formSubmit.inputFormSubmitInValidValidations(); 
     formSubmit.enterInputFormDetails(); 
    } 

} 

Mein 2. Testfall also AjaxFormSubmitPageTest

public class AjaxFormSubmitPageTest { //My Send TestCase 

    @Test 
    public static void validatingFieldsData() throws Throwable 
    { 
     WebDriver driver=TestBase.initialization(); // this is where i am starting browser 

     AjaxFormSubmitPage formSubmit=PageFactory.initElements(driver, AjaxFormSubmitPage.class);  
     formSubmit.inputFormLaunch(); 
     formSubmit.inputFormSubmitInValidValidations(); 
     formSubmit.enterInputFormDetails();   
    }  
} 

Mein TestNG.xml enthält folgende Einträge ...

class name="testcases.InputFormSubmitPageTest" 
class name="testcase.AjaxFormSubmitPageTest" 
+0

umgehen Singleton-Klasse verwenden - https://www.tutorialspoint.com/java/java_using_singleton.htm siehe diese Seite für weitere Details –

+0

nicht sicher, wie Singleton hier helfen kann. – bbk

+0

Setzen Sie webDriver object Methode als singleton.so, wenn Sie driver.get (URL) sagen, wird es nur die neue URL statt neuen Treiber starten –

Antwort

1

Wie wäre es ein @BeforeCl Erstellen ass und mache dort deine Treiberinitialisierung. Etwas wie:

@BeforeClass 
     public static void before() { 
    WebDriver driver=TestBase.initialization(); 
    } 

Diese nur einmal ausgeführt werden und wird Initialisierung tun.

Falls Sie nur Sorgen um die Ausführungsreihenfolge, werden Sie zwei Änderungen vornehmen müssen: 1. In Ihrer testng.xml Datei, werden Sie hinzufügen:

Test name = „Test“ bewahren -order = "true" Dies stellt die Ausführungsreihenfolge der in der Datei testng.xml erwähnten Testklasse sicher. Folgen Sie diesem Link für weitere Details http://www.seleniumeasy.com/testng-tutorials/preserve-order-in-testng

Falls Sie die Prioritätsreihenfolge innerhalb einer Klasse gewährleisten wollen, müssen Sie etwas tun, wie:

@Test(priority=1) public void Test1() {} 

@Test(priority=2) public void Test2() {} 

@Test(priority=3) public void Test3() {} 

Priorität Ausführungsreihenfolge fördert aber die bisherige Priorität ist keine Garantie Level ist abgeschlossen. test3 könnte beginnen, bevor test2 abgeschlossen ist. Wenn eine Garantie erforderlich ist, deklarieren Sie eine Abhängigkeit.

Im Gegensatz zu den Lösungen, die Abhängigkeiten deklarieren, werden Tests mit Priorität ausgeführt, auch wenn ein Test fehlschlägt. Dieses Problem mit Abhängigkeiten kann mit @Test (... alwaysRun = true ...) nach http://testng.org/doc/documentation-main.html#annotations

+0

Vielen Dank @anshulGupta für Ihre Zeit und Lösung es funktioniert – bbk

Verwandte Themen