2012-02-13 24 views
8

ile birden fazla tarayıcı (sürümleri) test nasıl sadece selenium keşfetti - harika bir araç! i selenyum-ide tarafından üretilen junit4 kodunu çalıştırmayı/kullanmayı planlıyorum. ama birçok tarayıcı/web sürücüleri ile çalıştırmak için ihtiyacım var. Bu kullanım durumu için bir junit/java modeli var mı? İlk düşüncem @RunWith (Parameterized.class) kullanmak ve bir WebDrivers Listesi (sınıf için parametre - muhtemelen tarayıcı ve sürümleri listeleyen harici bir dosya olarak sağlanmıştır) sağlamaktı. Bu iyi bir fikir mi? Tüm Selenyum testlerim tarafından kullanılmak üzere bir merkezi @Parameters -method sağlamak mümkün mü?selenium ve junit

Hangi alternatifler vardır?

Selenium'un manuel değişiklikleri en aza indirmek için dışa aktardığı "Biçimi" değiştirmek muhtemelen mümkün müdür?

cevap

4

Eh, zaman zaman sürücüleri değiştirmeniz gerektiğinde, bu yüzden bu yaptı:

Ben kendi sınıfında selenyum ilgili şeyler başlatmak - uygulama ve sürücü adıyla adlandırılan alıcılar tarafından yaklaştı . Benim Environment sınıfı bu

public class Environment { 
public enum DriverToUse {FIREFOX, CHROME}; 
// .. and some other stuff, because I need to test on different environments, so I store here Environment URL for example 

benziyor Ve benim test sınıfı bu

@Before 
public static final Environment.DriverToUse USED_DRIVER = Environment.DriverToUse.FIREFOX; 

@Test 
public void testVersionNumber() throws Exception{ 

    TestUI testUI= new TestUI(USED_DRIVER); 
    WebElement version = testUI.getDriver().findElement(By.id("the Id of element")); 
    version.click(); 
    //... 
} 
şöyle görünür tabii

private WebDriver driver; 
public TestUI(Environment.DriverToUse drv){ 
    switch (drv){ 
     case CHROME:{ 
      ChromeDriverService service = ChromeDriverService.createDefaultService(); 
      File file = new File(TestUI.class.getResource("/chromedriver.exe").toURI()); 
      System.setProperty(ChromeDriverService.CHROME_DRIVER_EXE_PROPERTY, file.getAbsolutePath());     
      ChromeOptions options = new ChromeOptions(); 
      options.addArguments("--start-maximized"); 
      driver = new ChromeDriver(service,options); 
      driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
      break; 
     } 
     case FIREFOX:{ 
      FirefoxProfile ffProfile = new FirefoxProfile(); 
      ffProfile.setPreference("browser.safebrowsing.malware.enabled", false); 
      driver = new FirefoxDriver(ffProfile); 
      driver.manage().window().setPosition(new Point(0, 0)); 
      java.awt.Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 
      Dimension dim = new Dimension((int) screenSize.getWidth(), (int) screenSize.getHeight()); 
      driver.manage().window().setSize(dim); 
      driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
      break; 

     }  

public WebDriver getDriver(){ 
return driver; 
} 

: my sınıf kurucu çağırmak, ben ile başlatmak için sürücünün enum türünü kullanın

2

Selenium RC/Selenium Sunucusunu kullanın. Bunlar API'larla birlikte gelir ve birden fazla tarayıcıda uzaktan testleri çalıştırmanız gerekir. İyi avlar!

+0

Bu sanırım yerel bir makinede de çalışıyor mu? thx i – dermoritz

+0

deneyeceğim sadece dokümanı okuyorum (http://code.google.com/p/selenium/wiki/Grid2) problemin devam ettiği anlaşılıyor. selenyum sunucusu ile de "webdriver" ile "yetenekleri" (belirli bir tarayıcı) başlatmak zorunda. Şu anda rc sunucu kullanarak sadece yapılandırma yükünü ima eder. – dermoritz

1

Selenide kitaplığına bakın. UI testini esinti yapan selenyum için açık kaynak kodlu bir sarıcıdır. İşte bir örnek test.

@Test 
public void userCanLoginByUsername() { 
    open("/login"); 
    $(By.name("user.name")).setValue("johny"); 
    $("#submit").click(); 
    $(".loading_progress").should(disappear); // Waits until element disappears 
    $("#username").shouldHave(text("Hello, Johny!")); // Waits until element gets text 
}