2015-04-07 37 views
2

我想在所有多個瀏覽器中運行selenium webdriver測試用例但不是並行。是否可以運行測試用例所有多個瀏覽器,而不使用XML和硒網格。我們可以通過使用註釋和Java類來完成它。我希望我的測試用例應該先在firefox中執行,並且在firefox中執行完成後,它應該開始在Chrome中執行,等等。如何在其他瀏覽器使用TestNg和eclipse後在多個瀏覽器中運行Selenium webdriver測試用例

我已經試過這段代碼,但執行是通過使用xml並行的。

CrossBrowserScript.java

import java.util.concurrent.TimeUnit; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.ie.InternetExplorerDriver; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.Parameters; 
import org.testng.annotations.Test; 

public class CrossBrowserScript { 

    WebDriver driver; 

    /** 
    * This function will execute before each Test tag in testng.xml 
    * @param browser 
    * @throws Exception 
    */ 
    @BeforeTest 
    @Parameters("browser") 
    public void setup(String browser) throws Exception{ 
     //Check if parameter passed from TestNG is 'firefox' 
     if(browser.equalsIgnoreCase("firefox")){ 
     //create firefox instance 
      driver = new FirefoxDriver(); 
     } 
     //Check if parameter passed as 'chrome' 
     else if(browser.equalsIgnoreCase("chrome")){ 
      //set path to chromedriver.exe 
      System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe"); 
      //create chrome instance 
      driver = new ChromeDriver(); 
     } 
     //Check if parameter passed as 'IE' 
       else if(browser.equalsIgnoreCase("ie")){ 
        //set path to IE.exe 
        System.setProperty("webdriver.ie.driver",".\\IEDriverServer.exe"); 
        //create IE instance 
        driver = new InternetExplorerDriver(); 
       } 
     else{ 
      //If no browser passed throw exception 
      throw new Exception("Browser is not correct"); 
     } 
     driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    } 

    @Test 
    public void testParameterWithXML() throws InterruptedException{ 
     driver.get("http://demo.guru99.com/V4/"); 
     //Find user name 
     WebElement userName = driver.findElement(By.name("uid")); 
     //Fill user name 
     userName.sendKeys("guru99"); 
     //Find password 
     WebElement password = driver.findElement(By.name("password")); 
     //Fill password 
     password.sendKeys("guru99"); 
    } 
} 

testngCrossBrowser.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> 
<suite name="TestSuite" thread-count="3" parallel="tests" > 
    <test name="ChromeTest"> 
    <parameter name="browser" value="Chrome" /> 
    <classes> 
     <class name="parallelTest.CrossBrowserScript"> 
     </class> 
    </classes> 
    </test> 
    <test name="FirefoxTest"> 
    <parameter name="browser" value="Firefox" /> 
    <classes> 
     <class name="parallelTest.CrossBrowserScript"> 
     </class> 
    </classes> 
    </test> 
    <test name="IETest"> 
    <parameter name="browser" value="IE" /> 
    <classes> 
     <class name="parallelTest.CrossBrowserScript"> 
     </class> 
    </classes> 
    </test> 
</suite> 
+0

vnnogile,你應該接受一個答案。 Pawels的答案爲我工作! – Ismoh

回答

1

在JUnit你可以創建MethodRule(http://junit.org/apidocs/org/junit/rules/MethodRule.html),這將運行在所有瀏覽器測試。

實施例:

public class ManyBrowsers implements MethodRule { 

public static WebDriver driver; 

@Override 
public Statement apply(final Statement base, FrameworkMethod method, Object target) { 
    return new Statement() { 

     @Override 
     public void evaluate() throws Throwable { 
      //RUN FIREFOX 
      driver = new FirefoxDriver(); 
      base.evaluate(); 
      driver.quit(); 

      //RUN CHROME 
      File f = //PATH to CHROME DRIVER 
      System.setProperty("webdriver.chrome.driver", f.getAbsolutePath()); 
      driver = new ChromeDriver(); 
      base.evaluate(); 
      driver.quit(); 
     } 
    }; 
} 

}

實施例試驗:

public class VisitGoogle { 

@Rule 
public ManyBrowsers browsers = new ManyBrowsers(); 

@Test 
public void test() { 
    ManyBrowsers.driver.navigate().to("https://www.google.com/"); 
} 

}

+0

感謝Pawel的回覆,實際上我是selenium webdriver的新手,所以我很難理解上面的代碼,請給我一個與此主題相關的代碼示例,這對我很有幫助。 – vnnogile

+0

我發現它甚至更容易使用JUnit MethodRule。我編輯了我的答案。現在它是完全可行的解決方案。 –

+0

嗨,Pawel,我在代碼中添加了上面的代碼,但它不工作它拋出異常。我創建了新帖子,以便其他人也看到該帖子,請回復我的帖子鏈接http://stackoverflow.com/questions/29627516/runing-test-cases-in-all-browser-one-after-another – vnnogile

0

嘗試改變thread-count="3"thread-count="1"。這應該按照您在TestNG文件中提到的順序執行您的測試。

相關問題