Запуск тестов JUnit в разных браузерах с использованием Selenium автоматически

Поэтому я использую Selenium API и успешно использую его для тестирования в Firefox и Chrome. Но что мне нужно сделать, чтобы автоматически запускать одни и те же модульные тесты в обоих браузерах. Я попытался поместить WebDrivers в объект ArrayList<WebDriver> drivers, но тесты не будут работать правильно, если я сделаю это таким образом. На данный момент в ArrayList есть только один драйвер, но с одной записью он все равно работать не будет. Вот немного кода...

package testsuites;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;

public class BingTests extends BaseTestSuite{
//private WebDriver fireFoxDriver;
private WebDriver chromeDriver;
private WebDriver fireFoxDriver;
private  ArrayList<WebDriver> drivers;

@Before
public void setUp() throws Exception {
    fireFoxDriver = new FirefoxDriver();
    fireFoxDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
    drivers.add(fireFoxDriver);
}

@Test
public void testGoogle(){
    for(WebDriver driver: drivers){
        driver.get("http://www.bing.com");
        driver.findElement(By.id("sb_form_q")).clear();
        driver.findElement(By.id("sb_form_q")).sendKeys("Selenium IDE");
        driver.findElement(By.id("sb_form_go")).click();
          driver.findElement(By.xpath("//ul[@id='wg0']/li[2]/div/div/h3/a/strong")).click();
        WebElement elem = driver.findElement(By.id("mainContent")); 
        assertTrue(elem.getText().contains("Selenium News"));
    }
}

@Test
public void isWikiContentCorrect(){
    for(WebDriver driver: drivers){
        driver.get("http://www.bing.com");
        driver.findElement(By.id("sb_form_q")).clear();
        driver.findElement(By.id("sb_form_q")).sendKeys("Saturn");
        driver.findElement(By.id("sb_form_go")).click();
        driver.findElement(By.linkText("Saturn - Wikipedia, the free encyclopedia")).click();
        driver.findElement(By.cssSelector("li.toclevel-1.tocsection-9 > a > span.toctext")).click();
        assertTrue(driver.getPageSource().contains("53 of which"));
    }
}

@Test
public void isWikiTitleCorrect(){
    for(WebDriver driver: drivers){
        driver.get("http://www.bing.com");
        driver.findElement(By.id("sb_form_q")).clear();
        driver.findElement(By.id("sb_form_q")).sendKeys("Saturn");
        driver.findElement(By.id("sb_form_go")).click();
        driver.findElement(By.linkText("Saturn - Wikipedia, the free encyclopedia")).click();
        assertEquals("Saturn - Wikipedia, the free encyclopedia", driver.getTitle());
    }
}

@Test
public void testDropDownWithSelenium(){
    for(WebDriver driver: drivers){
        driver.get("http://www.bing.com");
        driver.findElement(By.id("sb_form_q")).clear();
        driver.findElement(By.id("sb_form_q")).sendKeys("Neptunes moon");
        driver.findElement(By.partialLinkText("moons and rings")).click();
        driver.findElement(By.linkText("Neptune (planet) :: Neptune's moons       and rings -- Britannica Online ...")).click();
        List<WebElement> elems = driver.findElements(By.tagName("Input"));
        for(WebElement elem: elems){
            System.out.println(elem.getText());
        }
    }
}

@After
public void tearDown() throws Exception {
    for(WebDriver driver: drivers){
        driver.close();
    }
}
}

person Reid Mac    schedule 04.11.2011    source источник


Ответы (2)


Вы применили неправильную практику. Эта реализация требует ненужного зацикливания кода в методе тестирования. По мере увеличения количества тестовых случаев такая практика становится более болезненной (подумайте о сотнях тестовых случаев).

Используйте Selenium Grid или используйте QAF, ранее известный как ISFW. В Qmetry Automation Framework (QAF) вы можете установить его в файле конфигурации для работы в разных браузерах. Например

<suite name="Test Automation" verbose="0" parallel="tests">

    <test name="Test on FF">
      <parameter name="browser" value="InternetExplorerWebDriver" />
    ...
    </test>
    <test name="Test on IE">
      <parameter name="browser" value="firefoxWebDriver" />
    ...
    </test>
</suit>
person user861594    schedule 04.11.2011
comment
Спасибо за помощь. Я решил использовать TestNG, так как есть хороший плагин для eclipse, но он выглядит практически так же, как ISFW. - person Reid Mac; 04.11.2011
comment
Да, ISFW использует testNG в качестве тестовой среды и обеспечивает специфические потребности селена, поэтому можно использовать все функции tesNG, включая плагин eclipse. - person user861594; 05.11.2011

JUNIT с Selenium в разных браузерах

Автоматический запуск различных браузеров, например Chrome и FireFox

public class SimpleJunit {
    private static WebDriver driver;
    public static int random = 0;
    private String baseURL;
    // @BeforeClass : Executes only once for the Test-Class. 
    @BeforeClass public static void setting_SystemProperties(){
        System.out.println("System Properties seting Key value.");

        System.setProperty("webdriver.chrome.driver", "D:\\chromedriver.exe");  // Chrome Driver Location.
    }
    // @Before      : To execute once before ever Test.
    @Before public void test_Setup(){       
        System.out.println("Launching Browser");
        if (random == 0) {
            driver = new ChromeDriver(); // Creates new SessionID & opens the Browser.
        }else {
            driver = new FirefoxDriver();
        }

        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

        System.out.println("Session ID : " + ((RemoteWebDriver) driver).getSessionId() );
    }
    //  @Test        : Testing senarios.
    @Test public void robot_ScreenShot() throws AWTException, IOException{
        System.out.println("Robot Tset Screen Shot.");  
        baseURL = "http://searchsoa.techtarget.com/definition/stickiness";
                Robot robot = new Robot();   // CTRL+T new tab in Browser.                   

        driver.get(baseURL);        

                Toolkit toolkit = Toolkit.getDefaultToolkit();  
                int width = (int) toolkit.getScreenSize().getWidth();  
                int height = (int) toolkit.getScreenSize().getHeight();                 

                Rectangle area = new Rectangle(0, 0, width, height);
                BufferedImage bufferedImage = robot.createScreenCapture(area);
                ImageIO.write(bufferedImage, "png", new File("D:\\Screenshots\\JUNIT-Robot.png"));
                random += 1;
    }
    @Test public void selenium_ScreenShot() throws IOException { 
        baseURL = "http://www.w3schools.com/css/css_positioning.asp";
        driver.get(baseURL);
        System.out.println("Selenium Screen shot.");
        File screenshotFile = ((RemoteWebDriver) driver).getScreenshotAs(OutputType.FILE);                        
        FileUtils.copyFile(screenshotFile, new File("D:\\Screenshots\\JUNIT-Selenium.jpg"));
        random += 1;
    }
    // @After       : To execute once after ever Test.
    @After  public void test_Cleaning(){
        System.out.println("Closing Browser");
        baseURL = null;     
        driver.close(); // Removing SessionID & Close the Browser.      
/*if you are not using driver.quit(). then JUNIT-Test will not terminate untill you end chromedriver.exe process
  in Task-Manager. use CTRL+SHIFT+ESC to open TaskManager then goto processes-view find chromedriver.exe and 
  then end the process manually. */ 
        driver.quit(); // Ends the Process by removing chromedriver.exe process from Task-Manager.
    }
    // @AfterClass  : Executes only once before Terminating the Test-Class.
    @AfterClass public static void clearing_SystemProperties(){
        System.out.println("System Property Removing Key value.");              
        System.clearProperty("webdriver.chrome.driver");
    }   
}

JUnitПорядок выполнения тестов.

person Yash    schedule 28.07.2015